当前位置: 首页 > news >正文

快速入门,理解,使用 axios请求

为什么选择axios

区分Ajax,Jquery Ajax,Fetch, Axios

  • Ajax:
    ajax自然不必说,最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。

  • Jquery Ajax:

    jQuery框架中的发送后端请求技术,对原生XHR的封装,除此以外还增添了对JSONP的支持。
    随着三大主流框架的盛行,jQuery也开始有廉颇老矣尚能饭否之势
    主要的缺点有:

    1. 本身是针对MVC的编程,不符合现在前端MVVM的浪潮
    2. 基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
    3. JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)
  • Fetch:

    Fetch号称是AJAX的替代品,使用了ES6中的promise对象。Fetch是基于promise设计的,支持asynv/await;它更加底层,拥有丰富的API; 脱离了XHR;语法简单,也更加语义化。
    fetch 是一个相当底层的 API,在实际项目使用中,需要做各种各样的封装和异常处理,而并非开箱即用。其存在许多常见问题。
    例如:

    1. fetch请求对某些错误http状态不会reject
    2. 不支持JSONP
    3. fetch默认不会带cookie,需要添加配置项
      更多fetch问题大家也可以参考: 《fetch 没有你想象的那么美》
  • axios:
    axios是一个基于Promise用于浏览器和nodejs的HTTP客户端,其本质上也是对原生XHR的封装,符合最新ES规范。Axios既提供了并发的封装,也没有fetch的各种问题,而且体积也较小,当之无愧现在最应该选用的请求的方式。

axios的特性

1. 从浏览器中创建 XMLHttpRequest
2. 支持 Promise API
3. 客户端支持防止CSRF
4. 提供了一些并发请求的接口(重要,方便了很多的操作)
5. 从 node.js 创建 http 请求
6. 拦截请求和响应
7. 转换请求和响应数据
8. 取消请求
9. 自动转换JSON数据

PS:防止CSRF:就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。

axios的使用

axios的安装

使用npm:

npm install axios --save

在main,js入口文件中配置:

import Axios from 'axios';
Vue.prototype.$axios = Axios;

*通过挂载到VUE的原型对象上,在全局可以通过 this.$axios 的方式调用

axios的API

分享一篇axios的官方文档API攻略的帖子:《vue axios 全攻略》

axios的常用配置

  • 请求的根路径:
axios.defaults.baseURL = 'https://api.example.com';
  • 全局请求拦截器
// 添加全局请求拦截器
Axios.interceptors.request.use(
  config => {
  	isLoading.start();  // 此处可以配置页面加载进度条的开启
  	config.headers.Authorization = window.sessionStorage.getItem('token'); // 记录返回的token值到sessionStorage
    return config;
  },
  error => {
    // 跳转error页面
    router.push({ path: "/error" });
    return Promise.reject(error);
  }
);
  • 全局响应拦截器
// 添加全局响应拦截器
Axios.interceptors.response.use(
  res => {
  	isLoading.done(); //关闭加载动画
  	// 通过返回的状态码进行操作
    if (res.data.code === "401") {
      // 401表示没有登录
      // 提示没有登录
      Vue.prototype.notifyError(res.data.msg);
      // 修改vuex的showLogin状态,显示登录组件
      store.dispatch("setShowLogin", true);
    }
    if (res.data.code === "500") {
      // 500表示服务器异常
      // 跳转error页面
      router.push({ path: "/error" });
    }
    return res;
  },
  error => {
    // 跳转error页面
    router.push({ path: "/error" });
    return Promise.reject(error);
  }
);
  • 发送 get 请求
this.$axios.get('/user', {
	params: {
		ID: 12345
	}
})
.then(function (response) {
	console.log(response);
})
.catch(function (error) {
	console.log(error);
});
  • 发送 post 请求
this.$axios.post('/user', {
	firstName: 'Fred',
	lastName: 'Flintstone'
})
.then(function (response) {
	console.log(response);
})
.catch(function (error) {
	console.log(error);
});

相关文章:

  • 第二章 存储,2.1 永不停止的脚步——数据库优化之路(作者:佳毅)
  • CSS实现元素水平垂直居中的几种方式
  • 年末购机推荐,首选OPPO这两款中端旗舰王者
  • js中深浅拷贝的实现方式(含图解原理)
  • Java刷题知识点之File对象常用功能:获取文件名称、获取文件路径、获取文件大小、获取文件修改时间、创建与删除、判断、重命名、查看系统根目录、容量获取、获取某个目录下内容、过滤器...
  • 查看httpd状态
  • js中如何判断引用值为数组(几种不同方式的详解)
  • 项目代码重用
  • js中数组去重的几种实现方式(区别)
  • java创建文件和目录
  • JS For循环中嵌套setTimeout()方法的理解
  • ubuntu下zabbix服务器监控工具部署
  • 前端性能优化-图片
  • MapString, String循环遍历的方法
  • 快速掌握js中闭包的理解与应用(面试中如何回答闭包)
  • bearychat的java client
  • Consul Config 使用Git做版本控制的实现
  • cookie和session
  • interface和setter,getter
  • Java Agent 学习笔记
  • JavaScript类型识别
  • mockjs让前端开发独立于后端
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • node入门
  • 从PHP迁移至Golang - 基础篇
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 我有几个粽子,和一个故事
  • 一些css基础学习笔记
  • ​什么是bug?bug的源头在哪里?
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (pojstep1.1.2)2654(直叙式模拟)
  • (差分)胡桃爱原石
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (九十四)函数和二维数组
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (一)基于IDEA的JAVA基础1
  • (一一四)第九章编程练习
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)一些感悟
  • .md即markdown文件的基本常用编写语法
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Remoting学习笔记(三)信道
  • .net实现客户区延伸至至非客户区
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net下的富文本编辑器FCKeditor的配置方法
  • .Net下的签名与混淆
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [2544]最短路 (两种算法)(HDU)
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]