其他分享
首页 > 其他分享> > 前端之取消http请求

前端之取消http请求

作者:互联网

文章目录

1 需求场景

2 解决方案

2.1 XMLHttpRequest

原生的XMLHttpRequest,是支持取消http请求(abort)操作的: XMLHttpRequest.abort()

2.2 Fetch

fetch与XMLHttpRequest(XHR)类似,是ES6之后浏览器(除IE之外)默认支持的http操作函数。可惜不是默认支持abort操作。但我们可以通过AbortController来实现

// 声明AbortController
const controller = new AbortController();

// 正常的http调用
fetch('https://test.github.io', { signal: controller.signal })
    .then(r => r.json())
    .then(response => {
        console.log(response);
    })
    .catch(err => {
        if (err.name === 'AbortError') {
            console.log('Fetch was aborted')
        } else {
            console.log('Error', err)
        }
    });

// 需要取消请求时,调用:
controller.abort()

2.3 axios

axios 已经实现了abort操作

var source = axios.CancelToken.source();

axios.get('https://jackniu81.github.io', {
  cancelToken: source.token
}).catch(function(err) {
  if (axios.isCancel(err)) {
    // handle our cancel operation
    console.log('Request canceled', err.message);
  } else {
    // handle real error here
  }
});

// 需要取消请求时,调用:
source.cancel('Abort Request');

2.4 jquery

$.ajax内部已经实现了abort功能。直接调用.abort()即可。

3 总结

参考文章

前端进阶(2)使用fetch/axios时, 如何取消http请求

标签:axios,http,请求,err,前端,AbortController,abort,fetch
来源: https://blog.csdn.net/Tmraz/article/details/116155412