在jQuery中,我可以使用以下约定中止单个异步调用:
var xhr = $.ajax(...);
xhr.abort();
是否有中止使用$.when
启动的所有AJAX调用?
var xhr = $.when(ajaxOne(), ajaxTwo(), ajaxThree());
// Pseudo code
xhr.abort();
答案 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()
方法,因为没有内置方法可以立即取消所有请求