今天,我们从axios的概念以及如何使用axios,这两方面来仔细聊聊axios。

1、axios是什么?

  1. Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。前端最流行的 ajax 请求库,
  2. react/vue 官方都推荐使用 axios 发 ajax 请求

2、axios的特点?

  1. 基于 promise 的异步 ajax 请求库,支持promise所有的API
  2. 浏览器端/node 端都可以使用,浏览器中创建XMLHttpRequests
  3. 支持请求/响应拦截器
  4. 支持请求取消
  5. 可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据
  6. 批量发送多个请求
  7. 安全性更高,客户端支持防御 XSRF,就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。

3、axios常用语法有哪些?

axios(config): 通用/最本质的发任意类型请求的方式
axios(url[, config]): 可以只指定 url 发 get 请求
axios.request(config): 等同于 axios(config)
axios.get(url[, config]): 发 get 请求
axios.delete(url[, config]): 发 delete 请求
axios.post(url[, data, config]): 发 post 请求
axios.put(url[, data, config]): 发 put 请求
axios.defaults.xxx: 请求的默认全局配置
axios.interceptors.request.use(): 添加请求拦截器
axios.interceptors.response.use(): 添加响应拦截器
axios.create([config]): 创建一个新的 axios(它没有下面的功能)
axios.Cancel(): 用于创建取消请求的错误对象
axios.CancelToken(): 用于创建取消请求的 token 对象
axios.isCancel(): 是否是一个取消请求的错误
axios.all(promises): 用于批量执行多个异步请求
axios.spread(): 用来指定接收所有成功数据的回调函数的方法

4、axios为什么既能在浏览器环境运行又能在服务器(node)环境运行?

axios在浏览器端使用XMLHttpRequest对象发送ajax请求;在node环境使用http对象发送ajax请求。

var defaults.adapter = getDefaultAdapter();
function getDefaultAdapter () {var adapter;if (typeof XMLHttpRequest !== 'undefined') {// 浏览器环境adapter = require('./adapter/xhr');} else if (typeof process !== 'undefined') {// node环境adapter = require('./adapter/http');}return adapter;
}

上面几行代码,可以看出:XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能;process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程。原来作者是通过判断XMLHttpRequest和process这两个全局变量来判断程序的运行环境的,从而在不同的环境提供不同的http请求模块,实现客户端和服务端程序的兼容。

5、为何要用axios不用原生ajax?

因为ajax相对于axios有以下几个缺点:
1、本身是针对MVC的编程,不符合现在前端MVVM的浪潮
2、基于原生的XHR开发,XHR本身的架构不清晰。
3、JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)
4、不符合关注分离(Separation of Concerns)的原则
5、配置和调用方式非常混乱,而且基于事件的异步模型不友好。

6、安装使用axios

npm安装

npm install axios --save

通过cdn引入

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

新建http.js,封装好axios的get,post请求

import Axios from 'axios'
import ElementUI from 'element-ui'
const get = (url, params, config) => {// url为我们接口的地址url = '/api/' + url //本地开发环境return new Promise((resolve, reject) => {Axios.get(url, params, config).then(res => {resolve(res.data)if (res.data.code && res.data.code != 0) {ElementUI.Message.error(res.data.message || res.message || '系统错误')}}).catch(err => {reject(err)                 })})
}
const post = (url, params, config) => {// url为我们接口的地址url = '/api/' + url //本地开发环境 return new Promise((resolve, reject) => {Axios.post(url, params, config).then(res => {resolve(res.data)if (res.data.code && res.data.code != 0) {ElementUI.Message.error(res.data.message || res.message || '系统错误')}}).catch(err => {reject(err)          })})
}
export default {get,post
}

新建请求拦截AxiosPlugin.js,封装好请求拦截器

import axios from 'axios'
import router from '../router.js'// 创建 axios 实例
export const Axios = axios.create({timeout: 15000
})window.cancelInterface = []
//POST传参序列化(添加请求拦截器)
// 在发送请求之前做某件事
axios.interceptors.request.use(config => {config.cancelToken = new axios.CancelToken(cancel => {if (!window.cancelInterface) {window.cancelInterface = []}window.cancelInterface.push({cancel})})// console.log('config.token', config)if (config.token != 'none') {if (localStorage.token) {config.headers.Authorization = 'Bearer ' + localStorage.token}}return config},error => { return Promise.reject(error)}
)//返回状态判断(添加响应拦截器)
axios.defaults.headers['Content-Type'] = 'application/json; charset=UTF-8'
axios.interceptors.response.use(res => {if (res.data.code == '401') {router.push({path: '/login',query: {redirect: location.hostname}})return}//503跳转到错误页if (res.data.code == '503') {router.push({path: '/error',query: {redirect: location.hostname}})return}return res},error => {if (error.response.status === 401 || error.response.status === 403) {router.push({path: '/login',query: {redirect: location.hostname}})} else if (error.response.status === 503 ) {//503跳转到错误页router.push({path: '/error',query: {redirect: location.hostname}})} else if (error.response.status === 500) {// 服务器错误return Promise.reject(error.response.data)} // 返回 response 里的错误信息return Promise.reject(error.response.data)}
)
// 将 Axios 实例添加到Vue的原型对象上
export default {install(Vue) {Object.defineProperty(Vue.prototype, '$http', {value: Axios})}
}

一文读懂,axios相关推荐

  1. 从实验室走向大众,一文读懂Nanopore测序技术的发展及应用

    关键词/Nanopore测序技术    文/基因慧 随着基因测序技术不断突破,二代测序的发展也将基因检测成本大幅降低.理想的测序方法,是对原始DNA模板进行直接.准确的测序,消除PCR扩增带来的偏差, ...

  2. 一文读懂Faster RCNN

    来源:信息网络工程研究中心本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络. 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在20 ...

  3. 福利 | 一文读懂系列文章精选集发布啦!

    大数据时代已经悄然到来,越来越多的人希望学习一定的数据思维和技能来武装自己,虽然各种介绍大数据技术的文章每天都扑面而来,但纷繁又零散的知识常常让我们不知该从何入手:同时,为了感谢和回馈读者朋友对数据派 ...

  4. ​一文读懂EfficientDet

    一文读懂EfficientDet. 今年年初Google Brain团队在 CVPR 2020 上发布了 EfficientDet目标检测模型, EfficientDet是一系列可扩展的高效的目标检测 ...

  5. 一文读懂序列建模(deeplearning.ai)之序列模型与注意力机制

    https://www.toutiao.com/a6663809864260649485/ 作者:Pulkit Sharma,2019年1月21日 翻译:陈之炎 校对:丁楠雅 本文约11000字,建议 ...

  6. AI洞观 | 一文读懂英特尔的AI之路

    AI洞观 | 一文读懂英特尔的AI之路 https://mp.weixin.qq.com/s/E9NqeywzQ4H2XCFFOFcKXw 11月13日-14日,英特尔人工智能大会(AIDC)在北京召 ...

  7. 一文读懂机器学习中的模型偏差

    一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...

  8. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  9. 一文读懂你该了解的5G知识:现在别买5G手机

    来源: 腾讯科技 2019年是中国全力布局5G的一年:三大运营商纷纷搭建基站,手机厂商发布5G手机,部分城市已经开启了5G测试--在电信日这天,腾讯科技联合知乎推出重磅策划,聚焦和5G相关的小知识,精 ...

  10. 语言相关系数显著性_相关性分析在SPSS中的具体操作,一文读懂相关系数的含义及使用——【杏花开生物医药统计】...

    相关性分析介绍 生物和医学统计中,相关分析属于流程前端的探索性分析,研究变量间关系及性质,其结果在为下一步采取何种方法做出指引,为数据挖掘之前的基础工作. 相关系数的选择 相关分析之前,需要先确认变量 ...

最新文章

  1. javascript开发技巧训练_学好这些小技巧,帮你写出更好地JavaScript
  2. WGAN-GP代码注释
  3. 极路由2 root及校园802.1x拨号经验帖(西南校园)
  4. JavaFX UI控件教程(一)之简述
  5. java 日期操作工具类_java8操作日期的工具类
  6. windows下搭建基于nginx的rtmp服务器
  7. oracle dataguard 03113 error code solution
  8. Main函数参数argc,argv说明
  9. js中 new Date()使用说明
  10. 华为2022年软挑赛初赛试题及初级代码(成渝赛区)
  11. python逐行写入txt文件_Python中将变量按行写入txt文本中的方法
  12. html验证码 按住向右滑动,js实现滑动滑块验证登录
  13. 聚焦堆栈重建光场-SART实现(附代码)
  14. Oracle数据库增删改查
  15. MaxScript分享|FBX骨架转Bip骨架脚本 动画无缝转换 (通吃Max9-2016版本)
  16. 百度面试题--度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同,度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
  17. 廊坊金彩教育:店铺详情页设计要点
  18. 【k8s系列5】KubernetesClientException: too old resource version 原因分析
  19. CDO解析eml文件为html,C# 读取eml文件 例子(解析eml文件)
  20. python 图片数据集批量打标签

热门文章

  1. 计算机毕业设计django基于python的读书笔记共享平台(源码+系统+mysql数据库+Lw文档)
  2. QueryWrapper 或用法.or()
  3. Oracle数据库之官方案例库
  4. 打包软件——Setup factory 7.0使用介绍
  5. 我用 Python 爬了一下西安的房价
  6. javaweb基于SSM开发商城NBA网商购物平台 课程设计 毕业设计源码
  7. 思维导图解密人的五感一想
  8. Thinkphp验证码不显示问题
  9. 学校教育应如何体现真善美这一育人思想?
  10. 晋商银行“沧海”数据资产管理系统