vue + axios + promise:进行接口请求。post请求提交数据的三种方式

axios

GET请求

前端

<!--params是关键字,说明所携带的参数,json格式参数-->  
axios.get('/edit.do', {params: {id: value}})
    .then((response) => {
//TODO
})

后端

@GetMapping("/edit")
public Result edit(Integer id){
    //TODO
}

POST请求

Content-Type: application/json

import axios from 'axios'
let data = {"code":"1234","name":"yyyy"};
axios.post(`${this.$url}/test/testRequest`,data)
.then(res=>{
    console.log('res=>',res);            
})

Content-Type: multipart/form-data

import axios from 'axios'
let data = new FormData();
data.append('code','1234');
data.append('name','yyyy');
axios.post(`${this.$url}/test/testRequest`,data)
.then(res=>{
    console.log('res=>',res);            
})

Content-Type: application/x-www-form-urlencoded

import axios from 'axios'
import qs from 'Qs'
let data = {"code":"1234","name":"yyyy"};
axios.post(`${this.$url}/test/testRequest`,qs.stringify({
    data
}))
.then(res=>{
    console.log('res=>',res);            
})

DELETE请求

前端

<!--DELETE请求第二个参数,可携带多个json格式的参数,但需要params作为json参数的关键字-->
axios.delete('/delete.do', {params: {id: value}})
    .then((response) => {
    //TODO
})

后端

@DeleteMapping("/delete")
public Result delete(Integer id){
    //TODO
}

PUT请求

前端

<!--PUT请求第二个参数,可直接携带json格式的参数-->
axios.put('/update.do', {name:userName,age:userAge,address:userAddress})
    .then((response) => {
    //TODO
})

后端

public class User implements Serializable {
    private String name;
    private Integer age;
    private String address;
}

@PutMapping("/update")
public Result update(@RequestBody User user){
    //TODO
}

同步请求

asyns/await 将 axios 异步请求同步化

export default {
  name: 'Historys',
  data() {
    return { 
      totalData: 0,  
      tableData: []
    }
  },
  created () {
    this.getHistoryData()
  },
  methods: { 
    handleClick (tab) {
      let data = {
        status: tab.name,
        name: this.formInline.user,
        cid: this.formInline.identity,
        start_time: this.formInline.dateTime ? this.formInline.dateTime[0] : '',
        end_time: this.formInline.dateTime ? this.formInline.dateTime[1] : ''
      }
      this.getHistoryData()
    },
    // 统一处理axios请求
    async getHistoryData (data) {
      try {
        let res = await axios.get('/api/survey/list/', {
          params: data
        })
        this.tableData = res.data.result
        this.totalData = res.data.count
      } catch (err) {
        console.log(err)
        alert('请求出错!')
      }
    }
  }
}

当 axios 请求拿到的数据在不同场景下做不同的处理时

export default {
  name: 'Historys',
  data() {
    return { 
      totalData: 0,  
      tableData: []
    }
  },
  async created () {
    try {
      let res = await this.getHistoryData()
      console.log(res)
      // 等拿到返回数据res后再进行处理
      this.tableData = res.data.result
      this.totalData = res.data.count
    } catch (err) {
      console.log(err)
      alert('请求出错')
    } 
  },
  methods: {  
    async handleClick (tab) {
      let data = {
        status: tab.name,
        name: this.formInline.user,
        cid: this.formInline.identity,
        start_time: this.formInline.dateTime ? this.formInline.dateTime[0] : '',
        end_time: this.formInline.dateTime ? this.formInline.dateTime[1] : ''
      }
      try {
        let res = await this.getHistoryData()
        console.log(res)
        // 等拿到返回数据res后再进行处理
        this.tableData = res.data.result
        this.totalData = res.data.count
      } catch (err) {
        console.log(err)
        alert('请求出错')
      } 
    },
    // 封装axios请求,返回promise, 用于调用getHistoryData函数后作不同处理
    getHistoryData (data) {
      return new Promise((resolve, reject) => {
        axios.get('/api/survey/list/', {
          params: data
        }).then((res) => {
          resolve(res)
        }).catch((err) => {
          reject(err)
        })
      })
    }
  }
}

Promise

概述

Promise有三种状态:这三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆

  1. pending: 等待中,或者进行中,表示还没有得到结果
  2. resolved: 已经完成,表示得到了我们想要的结果,可以继续往下执行
  3. rejected: 也表示得到结果,但是由于结果并非我们所愿,因此拒绝执(用catch捕获异常)
var promise = new Promise((resolve,reject)=>{
    let url1= 'https://www.baidu.com'
    this.axios.get(url,{})
    .then((res)=>{
        resolve(res);
    })
    .catch((err)=>{
        console.log(err)
    })
});

不管是then或者catch返回的都是一个新的Promise实例!而每个Primise实例都有最原始的Pending(进行中)到Resolve(已完成),或者Pending(进行中)到Reject(已失败)的过程

基本用法

Promise.all()

var p = Promise.all([p1, p2, p3]);

说明:

  1. p1,p2,p3都是Promise的实例对象
  2. p要变成Resolved状态需要p1,p2,p3状态都是Resolved,如果p1,p2,p3至少有一个状态是Rejected,p就会变成Rejected状态

Promise.race()

var p = new Promise( [p1,p2,p3] )

说明:

  1. 只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变
  2. 率先改变的 Promise 实例的返回值,就传递给p的回调函数,p的状态就会改变Resolved状态

Promise resolve()

Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))

Promise reject()

Promise.reject('foo')
// 等价于
new Promise(reject => reject('foo'))

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue是一个用于构建用户界面的渐进式框架,而axios是一个基于Promise的HTTP库,用于发送异步请求。在Vue中使用axios可以实现与后端服务器进行数据交互。 首先,在Vue项目中引入axios。可以通过npm安装axios,并在项目中引入: ```javascript import axios from 'axios' ``` 然后,在Vue组件中使用axios发送请求。可以使用axios的get、post等方法发送HTTP请求,并通过then和catch处理返回的数据: ```javascript axios.get('/api/data') // 发送GET请求 .then(response => { // 处理返回的数据 this.data = response.data }) .catch(error => { // 处理请求错误 console.log(error) }) ``` 接下来,使用返回的数据更新Vue组件的数据。可以将返回的数据保存在Vue实例的data属性中,然后在模板中使用该数据: ```javascript export default { data() { return { data: null } } } ``` ```html <template> <div> <p>{{data}}</p> </div> </template> ``` 最后,使用echarts将数据可视化。可以在Vue生命周期的钩子函数中初始化echarts实例,并通过setData方法更新数据: ```javascript import echarts from 'echarts' export default { mounted() { // 初始化echarts实例 const myChart = echarts.init(document.getElementById('chart')) // 设置数据 myChart.setOption({ series: [{ data: this.data }] }) } } ``` 以上是使用Vue+axios+echarts进行数据交互和可视化的基本步骤。使用axios发送请求获取数据,然后使用echarts将数据进行可视化展示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值