0

ユーザーが選択するための複数のチェックボックスがあり、選択したチェックボックスに基づいてjqueryajax呼び出しを行う必要があります。そのために、FORループを使用して、選択した要素の配列を反復処理し、チェックボックスごとにajaxリクエストを送信しました。各リクエストには5〜10分以上かかります。現在のシナリオでは、すべてのajaxリクエストを同時に呼び出します。

以前のajaxリクエストを終了した後でのみ、次のajax呼び出しを呼び出したいです。

これに対する解決策はありますか?

4

4 に答える 4

1

再帰呼び出しを行うことができます。

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);
于 2013-01-30T11:10:37.433 に答える
0

readyStateChangefor ループではなく、メソッドで繰り返します。

    ...
    array_index++;
    var data = selected_elements[array_index];
    if (data) {
        send_ajax_request(data);
    }
}
于 2013-01-30T11:07:31.527 に答える
0

それは ajax の要点全体に反するようなものです。最初の「a」は通常「非同期」を意味すると考えられていますが、リクエストを同期させたい場合 (async = false jQuery を信じています)

于 2013-01-30T11:09:55.583 に答える
0

再帰呼び出しを使用すると、前の 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!
于 2016-09-23T07:22:32.220 に答える