博客
关于我
前端进阶(2)使用fetch/axios时, 如何取消http请求
阅读量:454 次
发布时间:2019-03-06

本文共 2035 字,大约阅读时间需要 6 分钟。

前端开发中HTTP请求的取消方法与实现

在前端开发中,HTTP请求的取消是非常重要的一项功能。尤其是在单页应用(SPA)中,由于页面跳转频繁,及时取消未完成的请求能够提升用户体验。以下将详细介绍几种常用方法,包括fetch、axios、jquery等如何实现HTTP请求的取消。


1. 需求

在现代前端应用中,HTTP请求的取消主要有以下两种场景:

  • 页面跳转时:当用户从一个页面跳转到另一个页面时,如果前一个页面的HTTP请求尚未完成(例如AJAX请求),我们希望能够取消该请求,避免资源浪费或状态不一致。

  • 长时间操作时:对于耗时较长的操作(如上传、下载等),如果用户希望中途取消操作,对应的HTTP请求也需要被取消以确保及时性和用户体验。


  • 2. Fetch取消HTTP请求

    Fetch是ES6引入的一种新的API,用于发起HTTP请求。与传统的XMLHttpRequest不同,Fetch默认不支持取消请求的功能,但可以通过AbortController实现。

    实现方法

  • 创建AbortController实例

    const controller = new AbortController();
  • 在fetch中使用信号

    fetch('https://jackniu81.github.io', {     signal: controller.signal }).then(response => {    console.log('获取数据成功');}).catch(err => {    if (err.name === 'AbortError') {        console.log('请求已被取消');    } else {        console.log('请求失败,错误信息:', err);    }});
  • 取消请求

    controller.abort();
  • 特点

    • 可扩展性AbortController可以用于一次性终止多个请求。
    • 兼容性:在大多数现代浏览器中都支持AbortController,但需要注意IE浏览器的兼容性问题。

    3. Axios取消HTTP请求

    Axios是一款流行的HTTP客户端库,支持通过cancelToken实现请求取消。

    实现方法

  • 创建取消源

    const source = axios.CancelToken.source();
  • 在请求中传递取消源

    axios.get('https://jackniu81.github.io', {    cancelToken: source.token}).catch(err => {    if (axios.isCancel(err)) {        console.log('请求已被取消');    } else {        console.log('请求失败,错误信息:', err);    }});
  • 主动取消请求

    source.cancel('Abort Request');
  • 特点

    • 语法简洁:axios提供了直接的API,操作简单易懂。
    • 默认支持:无需手动集成AbortController,axios内部已实现取消功能。

    4. Jquery取消HTTP请求

    Jquery作为一个功能强大的前端库,也内置了请求取消的功能。

    实现方法

  • 使用.abort()方法
    $.ajax({    url: 'https://jackniu81.github.io',    type: 'GET',    dataType: 'json',    success: function(data) {        console.log(data);    },    error: function(err) {        console.log('请求失败');    }});// 假设需要取消当前请求:$request.abort();
  • 特点

    • 简单易用:直接调用.abort()即可取消请求。
    • 无需额外配置:Jquery内部已优化了请求取消的逻辑。

    5. 总结

    在前端开发中,HTTP请求的取消是确保良好用户体验的重要环节。以下是几种常用方法的总结:

  • Fetch与AbortController集成

    • signal属性传递给fetch,可实现请求取消。
    • AbortController支持一次性终止多个请求。
  • Axios默认支持取消功能

    • 通过cancelToken传递取消源,主动调用source.cancel()即可终止请求。
  • Jquery内置取消功能

    • 直接调用.abort()可取消当前请求。
  • 优化建议

    • 在多个请求场景下,使用AbortController以实现集中管理。
    • 在实际应用中,结合具体需求选择合适的库或方法。
  • 通过合理使用这些方法,可以在前端开发中实现HTTP请求的取消,提升应用的性能和用户体验。

    转载地址:http://ultfz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现An Armstrong number阿姆斯特朗数算法(附完整源码)
    查看>>
    Objective-C实现anagrams字谜算法(附完整源码)
    查看>>
    Objective-C实现ApproximationMonteCarlo蒙特卡洛方法计算pi值算法 (附完整源码)
    查看>>
    Objective-C实现area under curve曲线下面积算法(附完整源码)
    查看>>
    Objective-C实现arithmetic算术算法(附完整源码)
    查看>>
    Objective-C实现armstrong numbers阿姆斯壮数算法(附完整源码)
    查看>>
    Objective-C实现articulation-points(关键点)(割点)算法(附完整源码)
    查看>>
    Objective-C实现atoi函数功能(附完整源码)
    查看>>
    Objective-C实现average absolute deviation平均绝对偏差算法(附完整源码)
    查看>>
    Objective-C实现average mean平均数算法(附完整源码)
    查看>>
    Objective-C实现average median平均中位数算法(附完整源码)
    查看>>
    Objective-C实现average mode平均模式算法(附完整源码)
    查看>>
    Objective-C实现avl 树算法(附完整源码)
    查看>>
    Objective-C实现AvlTree树算法(附完整源码)
    查看>>
    Objective-C实现backtracking Jump Game回溯跳跃游戏算法(附完整源码)
    查看>>
    Objective-C实现BACKTRACKING 方法查找集合的幂集算法(附完整源码)
    查看>>
    Objective-C实现bailey borwein plouffe算法(附完整源码)
    查看>>
    Objective-C实现balanced parentheses平衡括号表达式算法(附完整源码)
    查看>>
    Objective-C实现base64加密和base64解密算法(附完整源码)
    查看>>
    Objective-C实现base64加解密(附完整源码)
    查看>>