我已经实现了通常的AJAX池,但是当我中止所有请求时,它会以2个请求的增量中止它们。第一,第三,第五...
这基本上就是我要做的:
$.ajaxSetup({
beforeSend: function(jqXHR, settings) {
$.xhrPool.push(jqXHR);
},
complete: function(jqXHR, text) {
// Remove a completed request from the array
var index = $.xhrPool.indexOf(jqXHR);
if (index > -1) {
$.xhrPool.splice(index, 1);
}
},
error: function(jqXHR, textStatus, errorThrown) {
// Remove a error request from the array
var index = $.xhrPool.indexOf(jqXHR);
if (index > -1) {
$.xhrPool.splice(index, 1);
}
}
});
function abortAll() {
$.each($.xhrPool, function(key, value) {
value.abort();
});
}
如果我在
console.log(value)
内执行$.each
,则其中一些未定义。如果我在console.log($.xhrPool)
之前执行$.each
,它们看起来都还不错。我想念什么?
最佳答案
基于Gaby aka G. Petrioli answer的方法,实际解决此问题的最佳方法是创建一个新的数组进行循环:
function abortAll() {
// copying-an-array-of-objects-into-another-array-in-javascript
// https://stackoverflow.com/questions/16232915
var calls = Array.from($.xhrPool);
$.each(calls, function(key, value) {
value.abort();
});
}