jQuery - 无论如何都要中止由$ .when调用的AJAX调用列表?

时间:2016-12-08 22:31:37

标签: jquery asynchronous promise

在jQuery中,我可以使用以下约定中止单个异步调用:

var xhr = $.ajax(...);
xhr.abort();

是否有中止使用$.when启动的所有AJAX调用?

var xhr = $.when(ajaxOne(), ajaxTwo(), ajaxThree());
// Pseudo code
xhr.abort();

2 个答案:

答案 0 :(得分:2)

jQuery ajax调用有自己的.abort()机制。要使用它,你必须跟踪每个ajax调用返回的jqXHR对象。

var ajaxCalls = [ajaxOne(), ajaxTwo(), ajaxThree()];
$.when.apply($, ajaxCalls).then(function() {
    // results here
}, function(err) {
    // error here
});

然后,在某些时候,您可以决定中止其中一个ajaxCalls:

ajaxCalls[1].abort();

或者,他们都喜欢:

ajaxCalls.forEach(function(jqXHR) {
    jqXHR.abort();
});

请注意,所有ajax请求已经发送到服务器,服务器可能已经在中间或处理它们。调用.abort()将使客户端无法处理响应,但它可能不会对服务器产生太大影响(如果有的话)。

$.when()的返回结果是跟踪所有其他承诺的结果的摘要承诺。你无法在其上调用.abort()来中止ajax调用。 jQuery根本不起作用。

答案 1 :(得分:0)

我最终在每个单独的承诺上调用abort()方法,因为没有内置方法可以立即取消所有请求