在全局范围内中止所有jQuery AJAX请求
问题原因:在这段代码中,$.xhrPool.abortAll方法只能使用一次,因为$.xhrPool = [];会销毁该方法。当再次调用$.xhrPool.abortAll时,它将不起作用,因为你用一个空数组[]覆盖了$.xhrPool,这个空数组没有abortAll属性。
解决方法:可以使用$.xhrPool.length = 0;来代替$.xhrPool = [];,这样就可以多次使用abortAll方法了。
以下是整理后的文章:
你可以使用下面的脚本:
// $.xhrPool and $.ajaxSetup are the solution $.xhrPool = []; $.xhrPool.abortAll = function() { $(this).each(function(idx, jqXHR) { jqXHR.abort(); }); $.xhrPool = []; }; $.ajaxSetup({ beforeSend: function(jqXHR) { $.xhrPool.push(jqXHR); }, complete: function(jqXHR) { var index = $.xhrPool.indexOf(jqXHR); if (index > -1) { $.xhrPool.splice(index, 1); } } });
在http://jsfiddle.net/s4pbn/3/上检查结果。
你从这里复制并粘贴到这里。虽然我欣赏jsfiddle,但是-1因为你没有给予该问题应有的信誉。现在来引用一个电影台词:“不尊重你,不尊重你的牛,不尊重你的叔叔...” -木兰
这里的abortAll方法只能使用一次,因为$.xhrPool = [];会销毁该方法。如果你想要多次使用它,可以使用$.xhrPool.length = 0;代替。
有关详情,请参考stackoverflow.com/questions/1232040/…。
当你再次调用$.xhrPool.abortAll时,它将不起作用,因为你用一个空数组[]覆盖了$.xhrPool,这个空数组没有abortAll属性。
我遇到了TypeError: jqXHR.abort is not a function错误。
在使用jQuery的AJAX请求时,如果没有追踪到请求的句柄,是无法终止所有活动的Ajax请求的。但是,如果追踪到了句柄,那么可以通过循环遍历句柄,并在每个句柄上调用.abort()
来终止请求。
下面是一个示例代码,演示了如何追踪并终止所有的jQuery AJAX请求:
// 追踪AJAX请求句柄的数组 var ajaxHandles = []; // 发起一个AJAX请求,并将句柄存储到数组中 var request1 = $.ajax({ url: "example.com/api", method: "GET", success: function(response) { // 处理响应数据 } }); ajaxHandles.push(request1); // 发起另一个AJAX请求,并将句柄存储到数组中 var request2 = $.ajax({ url: "example.com/api", method: "POST", data: { name: "John" }, success: function(response) { // 处理响应数据 } }); ajaxHandles.push(request2); // 终止所有的活动AJAX请求 $.each(ajaxHandles, function(index, request) { request.abort(); });
通过将AJAX请求的句柄存储到一个数组中,我们可以追踪每个请求,并在需要时调用.abort()
方法来终止请求。在上面的示例代码中,我们发起了两个AJAX请求并将它们的句柄存储到ajaxHandles
数组中。然后,通过使用$.each()
方法遍历数组,并在每个句柄上调用.abort()
方法来终止请求。
通过这种方法,我们可以全局地终止所有活动的jQuery AJAX请求,以便我们可以在需要时中止它们的执行。
在使用jQuery进行AJAX请求时,有时候需要在请求还未完成时中断它们。为了实现这个目的,可以使用`abort()`方法来取消请求。以下是一个使用`abort()`方法的示例代码:
var request = $.ajax({ type: 'POST', url: 'someurl', success: function(result){..........} }); request.abort();
在这个例子中,首先创建了一个名为`request`的变量来存储AJAX请求。然后,可以通过调用`abort()`方法来取消请求。通过这种方式,可以在任何时候中断请求。
在解决这个问题之外,还可以参考以下文章:
- [Aborting Ajax](http://javascript.about.com/library/blajax11.htm)