ユーザーが選択するための複数のチェックボックスがあり、選択したチェックボックスに基づいてjqueryajax呼び出しを行う必要があります。そのために、FORループを使用して、選択した要素の配列を反復処理し、チェックボックスごとにajaxリクエストを送信しました。各リクエストには5〜10分以上かかります。現在のシナリオでは、すべてのajaxリクエストを同時に呼び出します。
以前のajaxリクエストを終了した後でのみ、次のajax呼び出しを呼び出したいです。
これに対する解決策はありますか?
ユーザーが選択するための複数のチェックボックスがあり、選択したチェックボックスに基づいてjqueryajax呼び出しを行う必要があります。そのために、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);
readyStateChange
for ループではなく、メソッドで繰り返します。
...
array_index++;
var data = selected_elements[array_index];
if (data) {
send_ajax_request(data);
}
}
それは ajax の要点全体に反するようなものです。最初の「a」は通常「非同期」を意味すると考えられていますが、リクエストを同期させたい場合 (async = false jQuery を信じています)
再帰呼び出しを使用すると、前の 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!