关于使用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 日期常用的方法
Nov 11 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
Jul 08 Javascript
jquery ui dialog实现弹窗特效的思路及代码
Aug 03 Javascript
js实现图片拖动改变顺序附图
May 13 Javascript
使用Xcache缓存器加速PHP网站的配置方法
Apr 22 Javascript
JS删除数组里的某个元素方法
Feb 03 Javascript
webpack组织模块打包Library的原理及实现
Mar 10 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
Nov 20 jQuery
JS执行控制之节流模式实例分析
Dec 21 Javascript
微信小程序云开发之云函数详解
May 16 Javascript
Javascript作用域和作用域链原理解析
Mar 03 Javascript
解决vant title-active-color与title-inactive-color不生效问题
Nov 03 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
德生PL990的分析评价
2021/03/02 无线电
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
php中session与cookie的比较
2015/01/27 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
JS 强制设为首页的代码
2009/01/31 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
RequireJs的使用详解
2017/02/19 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
python的re模块应用实例
2014/09/26 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
Python实现视频下载功能
2017/03/14 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
python3 flask实现文件上传功能
2020/03/20 Python
python excel多行合并的方法
2020/12/09 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
运动会入场解说词300字
2014/01/25 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
JS实现简单九宫格抽奖
2022/06/28 Javascript