关于使用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 相关文章推荐
保证JavaScript和Asp、Php等后端程序间传值编码统一
Apr 17 Javascript
JS运行耗时操作的延时显示方法
Nov 19 Javascript
一些常用的JavaScript函数(json)附详细说明
May 25 Javascript
JSON辅助格式化处理方法
Mar 26 Javascript
escape函数解决js中ajax传递中文出现乱码问题
Oct 30 Javascript
微信小程序 教程之数据绑定
Oct 18 Javascript
Js利用prototype自定义数组方法示例
Oct 20 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
Jul 18 Javascript
JS栈stack类的实现与使用方法示例
Jan 31 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
京东优选小程序的实现代码示例
Feb 25 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 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多进程编程实例
2014/10/15 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
JS自动适应的图片弹窗实例
2013/06/29 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
python面试题之列表声明实例分析
2019/07/08 Python
解决Mac下使用python的坑
2019/08/13 Python
Django中的cookie和session
2019/08/27 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
幼儿园教师辞职信
2014/01/18 职场文书
特教教师先进事迹
2014/05/21 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
CAD实训总结范文
2015/08/03 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android