【问题标题】:jQuery - Is There Anyway to Abort A List of AJAX Calls Invoked by $.when?jQuery - 无论如何都要中止 $.when 调用的 AJAX 调用列表吗?
【发布时间】:2016-12-08 22:31:37
【问题描述】:

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

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

是否可以中止使用$.when 发起的所有 AJAX 调用?

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

【问题讨论】:

  • 不,承诺不可取消。您需要访问每个 XHR 对象并单独中止它们。
  • 如果您将这些 ajaxOne、ajaxTwo、ajaxThree jQuery Promises 存储在某个结构中,那么,您可以遍历该结构并对其调用 abort根据需要

标签: jquery asynchronous promise


【解决方案1】:

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

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

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

ajaxCalls[1].abort();

或者,他们都喜欢:

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

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


$.when() 的返回结果是一个总结承诺,它跟踪所有其他承诺的结果。您不能在其上调用 .abort() 来中止 ajax 调用。 jQuery 根本不能那样工作。

【讨论】:

  • @lloydbanks - 这回答了你的问题吗?
【解决方案2】:

我最终对每个单独的 Promise 调用了 abort() 方法,因为没有内置方法可以一次取消所有请求

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多