取消ajax请求原理,XMLHttpRequest 取消请求

一,xmlHttpRequest介绍

是一个前后端数据通信的对象,在不刷新页面的情况下进行数据通信,在页面加载完成后请求后台服务、接收后台数据。

创建 XMLHttpRequest 对象:

xhr = new XMLHttpRequest();

xhr = new ActiveXObject("Microsoft.XMLHTTP");

创建请求

xhr.open(method, url, async);

xhr.send(string);

在使用post请求时string可选填。

请求响应

xhr.responseText; 获取字符串形式响应数据

xhr.responseXML; 获取 XML形式的响应数据

readyState请求响应阶段

xhr.onreadystatechange = function(){

xhr.readyState === 4; // Done 请求完成

xhr.status === 200; // 请求返回成功

}

xhr 对象提供的 API

0: "UNSENT"  请求未初始化

1: "OPENED"  请求连接已经建立

2: "HEADERS_RECEIVED"  请求已经接收

3: "LOADING"  请求处理中

4: "DONE"      请求已完成,响应已就绪

5: "onreadystatechange"

6: "readyState"

7: "timeout"

8: "withCredentials"

9: "upload"

10: "responseURL"

11: "status"

12: "statusText"

13: "responseType"

14: "response"

15: "responseText"

16: "responseXML"

17: "open"

18: "setRequestHeader"

19: "send"

20: "abort"  中止请求

21: "getResponseHeader"

22: "getAllResponseHeaders"

23: "overrideMimeType"

二,如何取消 ajax请求

上述简介可以看出在使用xhr进行异步的请求,是可以进行中止的。

方法一:xhr.abort() 调用中止api

xhr 就是 XMLHttpRequest 的实例,该实例调用对应的xhr.abort() 会终止当前的请求。

var xhr = newXMLHttpRequest();

xhr.open(‘get‘, ‘https://jianshu.com‘, true);

xhr.send();

xhr.onreadystatechange= function(){

console.log(xhr.responseText,‘-- respone‘)

}

setTimeout(()=> {xhr.abort()}, 20);

方法二:AbortController

var controller = newAbortController();var signal =controller.signal;var d = fetch(‘www.jianshu.com‘,{signal}).then(d => {console.log(d)}).catch(err => {console.log(err, ‘baocuo...‘)})

setTimeout(()=> {controller.abort()}, 10);

// DOMException: The user aborted a request. "baocuo..."

方法三:axios.CancelToken

axios.CancelToken

axios对abort方法进行了封装,取消请求

1,axios请求的第二个参数对象中增加一个key,cancelToken,cancelToken是 CancelToken的实例

2,实例的传参是一个函数,函数的参数是取消请求的方法

3,将这个方法透传到外层,可以在请求完成之前,随时取消请求。

三,ajax请求的拦截器原理

原文:https://www.cnblogs.com/the-last/p/12024807.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值