解决vue跨域axios异步通信问题
在项目中,常常需要从后端获取数据内容。特别是在前后端分离的时候,前端进行了工程化部署,跨域请求成了一个前端必备的技能点。好在解决方案很多。
在vue中,在开发中,当前使用较多的是axios进行跨域请求数据,但不少人遇到如下问题:
•异步通信,无法同步执行
•无法集中管理
•不便阅读
•还未请求成功就调转了
•then里面的逻辑越来越繁杂
以往的网络请求的写法如下:
//main.js
//引入axios
importaxiosfrom'axios'
Vue.prototype.$axios=axios;
//vue页面中的使用
//get
leturl='地址'
this.$axios.get(url,{
params:{}//参数信息
})
.then((res)=>{
//成功后执行语句
})
.catch((err)=>{
//网络中断或失败执行语句
})
//post
leturl='地址'
this.$axios.post(url,{
//参数信息
})
.then((res)=>{
//成功后执行语句
})
.catch((err)=>{
//网络中断或失败执行语句
})
或许在目前的过程中异步能够更好的解决用户体验感,先加载后弹出。但总有那么一个场景我们需要大量的内容进行处理,而且前后有明显的顺序执行的关系,那么异步通信可能会对你造成不必要的问题。所以,解决运用async/await解决异步通信问题
在main.js旁边新建http.js文件
//http.js
引入axios
importaxiosfrom'axios'
varhttp={
//get请求
get:function(url,params){
returnnewPromise((resolve,reject)=>{
axios.get(url,{
params:params
})
.then((response)=>{
resolve(response.data)
})
.catch((error)=>{
reject(error)
})
})
}
//post请求
post:function(url,params){
returnnewPromise((resolve,reject)=>{
axios.post(url,params)
.then((response)=>{
resolve(response.data)
})
.catch((error)=>{
reject(error)
})
})
}
}
exportdefaulthttp
并在main.js入口引入
//引入http请求 importhttpfrom'./http.js' Vue.prototype.$http=http
现在就可以在页面中使用了
//在vue中使用
//get
asynclogin(){
leturl='地址'
letparams={}//参数
letres=awaitthis.$http.get(url,params)
}
//post
asynclogin(){
leturl='地址'
letparams={}//参数
letres=awaitthis.$http.post(url,params)
}
async放在方法前面
await放在$http前面就OK了
单词示意:
async:异步。
await:等待。
总结
以上所述是小编给大家介绍的解决vue跨域axios异步通信问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!