痞子泰

导航

 

本人在项目中使用到axios和ajax两种发送异步请求的方式:

下面先谈谈使用axios发送异步请求的取消操作:

使用 cancel token 取消请求

Axios 的 cancel token API 基于cancelable promises proposal,它还处于第一阶段。

可以使用 CancelToken.source 工厂方法创建 cancel token,像这样:

var CancelToken = axios.CancelToken;
var source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function(thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // 处理错误
  }
});

// 取消请求(message 参数是可选的)
source.cancel('Operation canceled by the user.');

 

还可以通过传递一个 executor 函数到 CancelToken 的构造函数来创建 cancel token:

var CancelToken = axios.CancelToken;
var cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // executor 函数接收一个 cancel 函数作为参数
    cancel = c;
  })
});

// 取消请求
cancel();

 

Note : 可以使用同一个 cancel token 取消多个请求

 

接着谈一下使用ajax取消异步请求的使用:

普通的ajax很少会涉及到需要取消请求的操作,但是在定时(setInterval)发送异步请求的时候,取消ajax就变得额外重要,废话不多说,直接上代码

$(document).ready(
    var xhr;
    var fn = function () {
        if (xhr && xhr.readyState != 4) {
            xhr.abort();
        }
        xhr = $.ajax({
            url: 'ajax/progress.ftl',
            success: function (data) {
                //do something
            }
        });
    };

    var interval = setInterval(fn, 500);
);

 

总结:上面两种取消请求的方式并不是每次请求都需要考虑到,只是到遇到问题的时候多一种解决思路而已

  推荐文章: JS 打开新窗口

posted on 2017-07-13 11:12  痞子泰  阅读(8345)  评论(0编辑  收藏  举报