关于使用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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 Javascript
用JS做的简单的可折叠的两级树形菜单
Sep 21 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
Sep 29 Javascript
javascript二维数组转置实例
Jan 22 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
Aug 14 Javascript
JS完成画圆圈的小球
Mar 07 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
Jun 12 jQuery
node版本管理工具n包使用教程详解
Nov 09 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
Vue 3.0双向绑定原理的实现方法
Oct 23 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
Nov 17 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
星际中的相关伤害
2020/03/04 星际争霸
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
Python实现测试磁盘性能的方法
2015/03/12 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
Python json格式化打印实现过程解析
2020/07/21 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
产品设计开发计划书
2014/05/07 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
党员示范岗材料
2014/12/19 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
宾馆客房管理制度
2015/08/06 职场文书
周末问候语大全
2015/11/10 职场文书
导游词之安徽九华山
2019/09/18 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
python元组打包和解包过程详解
2021/08/02 Python