axios拦截器

XHR

(1)xhr是XMLHttpRequest的简写
(2)xhr是一组API函数集,可被JavaScript、JScript、VBScript以及其他web浏览器内嵌的脚本语言调用,通过HTTP在浏览器和web服务器之间收发XML数据或者其他数据。最大的好处就是动态刷新网页。
(3)xhr中的get、post请求

// 创建XHR
let xhr = new XMLHttpRequest();
// 利用open方法将API接口引过来,建立连接
xhr.open('GET', 'http://xxxxx', true)
三个参数分别为:method、url、async是否异步(true或者默认都是异步)
// 利用send发送Ajax请求
xhr.send('id=2')
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
// open异步为true,异步就需要
// onreadystatechange=function() {}
xmlhttp.onreadystatechange=function(){
	if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
		// 其他操作
	}
}
// readyState(状态值)和status(状态码)
// rs是标识运行xhr过程中的几种状态:
// 0 未初始化(创建xhr对象) 1 (载入)准备发送状态(调用open) 2 (载入成功)已经发送状态 (调用send)3 (解析)正在接受状态 (已经接受HTTP响应头信息,但是具体信息没有接收完) 4 (完成)读取HTTP响应的接收

// status(状态码)
// HTTP响应码
// 1XX 服务器收到请求,需要继续处理。
// 2XX 请求成功
// 3XX 重定向
// 4XX 客户端错误
// 5XX 服务器错误

Ajax

ajax就是基于浏览器提供的XMLHttpRequest对象来实现的,对xhr的封装
$.ajax({
url: ‘01time1.php’,
type: ‘get’,
dataType: ‘json’, // 用于设置响应体的类型 注意 跟 data 参数没关系!!!,
beforeSend: function (xhr) {
// 在所有发送请求的操作(open, send)之前执行
console.log(‘beforeSend’, xhr);
},
success: function (res) {
// 只有请求成功(状态码为200)才会执行这个函数
console.log(res);
},
error: function (xhr) {
// 只有请求不正常(状态码不为200)才会执行
console.log(‘error’, xhr);
},
complete: function (xhr) {
// 不管是成功还是失败都是完成,都会执行这个 complete 函数(一般成功与失败都需要执行的操作写在这里)
console.log(‘complete’, xhr);
}
});
ajax参数介绍:
https://www.cnblogs.com/difs/p/9493414.html

axios和axios拦截器

axios

Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中;是请求资源的模块;通过promise对ajax的封装。
  属性:url、method、data、responseType、.then、.catch…

// 第一种方式  将参数直接写在url中
axios.get('/getMainInfo?id=123')
.then((res) => {
  console.log(res)
})
.catch((err) => {
  console.log(err)
})
// 第二种方式  将参数直接写在params中
axios.get('/getMainInfo', {
  params: {
    id: 123
  }
})
.then((res) => {
  console.log(res)
})
.catch((err) => {
  console.log(err)
})
//  执行post请求,注意执行post请求的入参,不需要写在params字段中,这个地方要注意与get请求的第二种方式进行区别。
axios.post('/getMainInfo', {
  id: 123
})
.then((res) => {
  console.log(res)
})
.catch((err) => {
  console.log(err)
})

axios是通过Promise实现对ajax技术的一种封装,就像jquery对ajax的封装一样。
简单来说就是ajax技术实现了局部数据的刷新,axios实现了对ajax的封装,axios有的ajax都有,ajax有的axios不一定有。
总结一句话就是axios是ajax,ajax不止axios。

axios拦截器

⼀般在使⽤axios时,会⽤到拦截器的功能,⼀般分为两种:请求拦截器、响应拦截器。
1.请求拦截器 在请求发送前进⾏必要操作处理,例如添加统⼀cookie、请求体加验证、设置请求头等,相当于是对每个接⼝⾥相同操作的⼀个封装;

2.响应拦截器,同理,响应拦截器也是如此功能,只是在请求得到响应之后,对响应体的⼀些处理,通常是数据统⼀处理等,也常来判断登录失效等。

import axios from 'axios'

// 添加请求拦截器,在请求头中加token,Cookie
axios.interceptors.request.use(
  config => {
    if (localStorage.getItem('Authorization')) {
      config.headers.Authorization = localStorage.getItem('Authorization');
    }
    if (localStorage.getItem('Cookies')) {
      config.headers.Cookies = localStorage.getItem('Cookies');
    }
    return config;
  }, error => {
    return Promise.reject(error);
  });

// 这里拦截401错误,并重新跳入登页重新获取token
axios.interceptors.response.use(
  response => {
    console.log("response.use" + response)
    if (response.data.data && response.data.data.ecode == '401') {
      localStorage.removeItem('Authorization');
      localStorage.removeItem('Cookie');
      this.$router.push('/login');
    } else {
      return response;
    }
  }, error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          localStorage.removeItem('Authorization');
          localStorage.removeItem('Cookie');
          this.$router.push('/login');
      }
    }
    return Promise.reject(error.response.data)
  }
);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Axios 拦截器是一种在请求发送和响应返回之前,对请求和响应进行处理的机制。Axios 拦截器可以用于添加请求头、验证请求数据、对响应数据进行处理等场景。 Axios拦截器是基于 Promise 实现的,每个拦截器都是一个 Promise,其 resolve 函数接收一个 config 对象或 response 对象作为参数。Axios 支持两种类型的拦截器:请求拦截器和响应拦截器。 请求拦截器会在请求发送之前执行,响应拦截器会在响应返回之后执行。请求拦截器可以用于添加请求头、验证请求数据等操作,响应拦截器可以用于对响应数据进行处理。 Axios拦截器原理可以简单概括为: 1. 创建一个 Axios 实例,并设置默认配置。 2. 将请求和响应拦截器添加到实例中。 3. 当发送请求时,按照顺序执行请求拦截器中的代码。 4. 如果请求拦截器中发生了错误,Promise.reject() 方法会直接返回错误信息。 5. 如果请求拦截器中没有发生错误,Axios 会将最终的请求参数发送给服务器。 6. 当服务器返回响应时,Axios 会按照顺序执行响应拦截器中的代码。 7. 如果响应拦截器中发生了错误,Promise.reject() 方法会返回错误信息。 8. 如果响应拦截器中没有发生错误,Axios 会将最终的响应结果返回给调用者。 总之,Axios 拦截器的原理就是在请求和响应之间插入一些处理代码,以实现对请求和响应的自定义处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值