关于使用axios的一些心得技巧分享


Posted in Javascript onJuly 02, 2017

本文主要跟大家介绍了关于使用axios的一些心得技巧,分享出来供大家参考学习,下面来一起看看详细的介绍:

一、带cookie请求

axios默认是请求的时候不会带上cookie的,需要通过设置withCredentials: true来解决。

二、使post请求发送的是formdata格式数据

首先必须设置请求头

//可以通过这种方式给axios设置的默认请求头
axios.defaults.headers = {
"Content-Type": "application/x-www-form-urlencoded"
}

其次再发送之前需要处理一下数据

// 发送请求前处理request的数据
axios.defaults.transformRequest = [function (data) {
// Do whatever you want to transform the data
let newData = ''
for (let k in data) {
newData += encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) + '&'
}
return newData
}]

三、拦截器

你可以截取请求或响应在被 then 或者 catch 处理之前。

举个小例子:发ajax请求的时候需要有一个loading动画,而在请求回来之后需要把loading动画关掉,就可以使用这个拦截器来实现。

//添加请求拦截器
axios.interceptors.request.use(config => {
 //在发送请求之前做某事,比如说 设置loading动画显示
 return config
}, error => {
 //请求错误时做些事
 return Promise.reject(error)
})

//添加响应拦截器
axios.interceptors.response.use(response => {
 //对响应数据做些事,比如说把loading动画关掉
 return response
}, error => {
 //请求错误时做些事
 return Promise.reject(error)
})

//如果不想要这个拦截器也简单,可以删除拦截器
var myInterceptor = axios.interceptors.request.use(function () {/*...*/})
axios.interceptors.request.eject(myInterceptor)

ps:另外附上自己在项目中使用axios的方式

一般会将所有的ajax请求放在一个模块中,新建一个http.js

//http.js
//设置请求baseURL
axios.defaults.baseURL = '/api'
//设置默认请求头
axios.defaults.headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
// 发送请求前处理request的数据
axios.defaults.transformRequest = [function (data) {
let newData = ''
for (let k in data) {
 newData += encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) + '&'
}
return newData
}]
// 带cookie请求
axios.defaults.withCredentials = true

//get请求
function get(url) {
 return body => axios.get(url, { params: body })
 }
//post请求
function post(url) {
return body => axios.post(url, body)
}

//导出使用 
export const login = get('/login')

假设配合vue使用

// 引入login模块
import { login } from 'http'
export default {
 methods:{
 //配合 async/await使用效果更佳
  async get() {
   try {
    let res = await login({ account: 'admin' })
    console.log(res)
   } 
   catch (e) {
    console.log(e)
   }
  }
 }
}

再另外有些人可能喜欢把axios挂载到Vue的原型上,从而在子组件内可以直接访问的到,做法如下:

Vue.prototype.$http = axios //其他页面在使用axios的时候直接 this.$http就可以了

除非页面足够简单,不然我个人不太喜欢这种做法。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js自带函数备忘 数组
Dec 29 Javascript
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
javascript 面向对象编程 万物皆对象
Sep 17 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
jQuery中hide()方法用法实例
Dec 24 Javascript
Css3制作变形与动画效果
Jul 24 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
JavaScript实现单例模式实例分享
Dec 22 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
vue使用openlayers实现移动点动画
Sep 24 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 Javascript
React服务端渲染(总结)
Jul 01 #Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 #Javascript
详解node-ccap模块生成captcha验证码
Jul 01 #Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 #Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 #Javascript
详解vue中computed 和 watch的异同
Jun 30 #Javascript
You might like
十天学会php之第六天
2006/10/09 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
PHP微信支付实例解析
2016/07/22 PHP
javascript的函数
2007/01/31 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
利用Python如何生成随机密码
2016/04/20 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
速记Python布尔值
2017/11/09 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
python实现微信防撤回神器
2019/04/29 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
优秀毕业生求职信
2014/06/05 职场文书
建设工程授权委托书
2014/09/22 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
2014年教研室工作总结
2014/12/06 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
爱国主题班会教案
2015/08/14 职场文书
反邪教教育心得体会
2016/01/15 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang