如何取消由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
});
}
但它仅取消最后一个循环
答案 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();
}