我已经实现了通常的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();
  });
}

09-25 17:21