Vue.js Ajax(axios)菜鸟教程:https://www.runoob.com/vue2/vuejs-ajax-axios.html
Axios中文说明:https://www.kancloud.cn/yunye/axios/234845
Vue.js已不推荐使用的vue-resource:
最近团队讨论了一下,Ajax 本身跟 Vue 并没有什么需要特别整合的地方,使用 fetch polyfill 或是 axios、superagent 等等都可以起到同等的效果,vue-resource 提供的价值和其维护成本相比并不划算,所以决定在不久以后取消对 vue-resource 的官方推荐。已有的用户可以继续使用,但以后不再把 vue-resource 作为官方的 ajax 方案。
知乎链接:https://www.zhihu.com/question/52418455/answer/130535375
一、安装axios
npm install axios --save
(安装成功后,package.json文件的"dependencies"中会出现axios的版本号。)
在vue中,一般使用axios去发送请求,axios是基于promise对象封装的ajax的第三方库,所以axios里面包含了promise对象。
二、开发环境配置请求接口(可配置多个跨域接口)
在config/index.js的proxyTable中添加:
proxyTable: {
//自己设置一个代理服务器
'/api': {
target: 'http://***/***/***', //服务器接口域名,以后用 '/api'代替该网址
changeOrigin: true,//是否跨域
pathRewrite: {
//本地VUE启动后的访问域名
'^/api': ''
}
},
},
}
其中,'api'可自定义。
三、实现
引入axios
import axios from "axios"
发送get请求
mounted() {
this.getData();
},
methods: {
getData() {
// 发送get请求,
// 参数1: 必填,字符串,请求的数据接口的url地址
// 参数2:可选,json对象,要提供给数据接口的参数
// 参数3:可选,json对象,请求头信息
axios
.get("/api?ID=123")
.then(function(response) {
// 请求成功以后的回调函数
console.log("请求成功");
console.log(response);
})
.catch(function(error) {
// 请求失败以后的回调函数
console.log("请求失败");
console.log(error.response);
});
},
}
四、同时执行多个请求
axios.all([
axios.get(url1),
axios.get(url2)
])
.then(axios.spread(function (url1Data, url2Data) {
//上面两个请求都完成后,才执行这个回调方法
//收到的是数组,顺序和请求发送的顺序相同,使用axios.spread分割成多个单独的响应对象
console.log('url1Data', url1Data.data);
console.log('url2Data', url2Data.data);
}));
五、使用async/await书写异步机制代码
使用异步机制,可在其他方法中使用 通过get请求获取的数据。
https://www.jianshu.com/p/1e75bd387aa0
get(url) {
//Promise对象,两个参数及两个函数,
//resolve: 将Promise对象的状态从'未完成'变为'成功',在异步操作成功时调用,并将异步操作的结果作为参数传递出去
//reject:将Promise对象的状态从'未完成'变为'失败',在异步操作失败时调用,并将异步操报出的错误作为参数传递出去
return new Promise((resolve, reject) => {
axios.get(url)
.then(res => {
resolve(res.data);
console.log("2",res.data)
})
.catch(err => {
reject(err.data)
console.log("2",err.data)
})
});
}
async function getData(url) {
try {
console.log("1,start");
let data = await get(url); //等待一个promise对象,返回promise对象的处理结果
console.log("3,end");
} catch (err) {
console.log("4,error");
}
}
getData("/api?ID=123");