如何取消for循环中的所有ajax请求

时间:2018-05-06 04:25:58

标签: javascript jquery ajax

如何取消由for循环

处理的所有ajax请求
QTimer::singleShot

尝试使用

var url = ["www.example.com","www.example2.com",....];

for (var i = 0; i < url.length; i++) {

var XHR =$.get(url[i], function(data) {
    //stuff to do 

});
}

但它仅取消最后一个循环

2 个答案:

答案 0 :(得分:0)

它仅停止最后一个请求,因为您在for循环中重复分配了AJAX调用的引用。因此,当循环结束时,您将最终获得XHR变量中最后一次AJAX调用的引用。

abort()上拨打XHR只会停止上一次请求。要缓解,您需要将所有AJAX请求放在第二个数组中,并在其上循环以停止每个请求:

var url = ["www.example.com","www.example2.com",....];
// Create a second array to hold the references of AJAX requests
var requests = [];

for (var i = 0; i < url.length; i++) {
  var XHR = $.get(url[i], function(data) {
    // do stuff here
  });

  // Add the AJAX reference to the array
  requests.push(XHR);
}

// To stop all requests:
requests.forEach(request => request.abort());

答案 1 :(得分:0)

您应该将所有ajax请求的引用存储在数组中,而不是将其存储在单个变量中。

var url = ["www.example.com","www.example2.com",....];
var xhr_all = [];

for (var i = 0; i < url.length; i++) {

var XHR =$.get(url[i], function(data) {
    //stuff to do 

});

xhr_all.push(XHR);
}

现在循环遍历xhr_all变量的所有元素以中止所有ajax请求。

for (var i = 0; i < xhr_all.length; i++) {
    xhr_all[i].abort();
}