我有多个复选框供用户选择,并且基于选定的复选框,我需要进行 jquery ajax 调用。为此,我使用 FOR 循环遍历选定元素数组并为每个复选框发送 ajax 请求。每个请求需要 5-10 分钟以上。在当前情况下,它同时调用所有 ajax 请求。
我只想在完成较早的 ajax 请求后才调用下一个 ajax 调用。
有什么解决办法吗?
我有多个复选框供用户选择,并且基于选定的复选框,我需要进行 jquery ajax 调用。为此,我使用 FOR 循环遍历选定元素数组并为每个复选框发送 ajax 请求。每个请求需要 5-10 分钟以上。在当前情况下,它同时调用所有 ajax 请求。
我只想在完成较早的 ajax 请求后才调用下一个 ajax 调用。
有什么解决办法吗?
您可以进行递归调用。
function sendAjax(id) {
var checkbox = $('input[type=checkbox]:eq('+id+')','#formid');
if(checkbox == undefined)
return;
$.ajax({
type: 'POST',
dataType: "json",
url: 'url',
data: { },
success: function (data) {
sendAjax(id+1);
},
error: function (data) {
alert(data.responseText);
}
});
}
sendAjax(0);
这有点违背 ajax 的全部观点。第一个“a”通常被认为是“异步”的意思,但是你想让请求同步(async = false 我相信jQuery)
在您的方法中迭代,readyStateChange
而不是在 for 循环中。
...
array_index++;
var data = selected_elements[array_index];
if (data) {
send_ajax_request(data);
}
}
使用递归调用,直到上一个ajax请求没有完成,下一个请求才能被处理。所以递归调用可以解决这些ajax请求的问题。
var queue_element = ["a","b","c","d","e","f","g"];
var execute_queue = function(i){
$.ajax( {
url: queue_element[i],
success: function({
i++; // going to next queue entry
// check if it exists
if (queue_element[i] != undefined){
execute_queue(i);
}
}
}); // end of $.ajax( {...
}; // end of execute_queue() {...
var index = 0;
execute_queue(index); // go!