2

順次実行する必要がある一連の ajax 呼び出しがありますが、同期は必要ありません。これを行う最善の方法は何ですか?

できることはわかっていますが$.when().then()、それは2つのajax呼び出しでしか機能しませんか? 理想的には、私は次のようなことをしたいと思っています:

var caller;
for (var i = 0; i < argObjects.length; i++) {
    if (typeof caller === 'undefined') {
        caller = $.when($.ajax(... data: argObjects[i]...));
    }
    else {
        caller.then($.ajax(... data: argObjects[i]...));
    }
}

つまり、一連thenの を追加するだけで、すべてを連鎖させることができます。しかし、これは不可能です。jQueryでそれを行う別の方法はありますか?

これらの呼び出しは同時に実行できないことに注意してください。set としてループを実行できますが、async: false処理中にユーザーから制御が奪われてしまい、良くありません。

別の考え方として、すべてを 1 回の呼び出しで送信することもできますが、実行中のタスクの進行状況を監視するにはどうすればよいでしょうか。更新するデータが 10 週間あり、各週が完了するたびに通知を受け取りたいとします。10 回の連続した ajax 呼び出しを送信した場合、それぞれが戻ってきて、完了したことを通知し、何らかの進行状況バーを更新できます。ここが本当の最終目標です。

その間、jQuery の deferred に頭を悩ませようとします。

4

2 に答える 2

2

成功ハンドラーを使用して次の ajax 呼び出しを開始し、カウンターを使用して実行中のリクエストを追跡するという別のアプローチを取ることができます。

var i = 0;
function run() {
    $.ajax(... data: argObjects[i]..., function() {
        i++;
        if (i < argObjects.length) {
            run();
        }
    });
}
run();
于 2013-06-10T05:25:22.620 に答える
1

連続した ajax 呼び出しの場合、最初の ajax の成功の中で別の ajax を呼び出しています。

このような:-

function ajax1(){
  $.ajax({
    url: "",
    data: dataString,
    type: "POST" ,
    dataType: "text",
    cache: false,   
    success: function(response_data){
        ajax2(); // call second ajax on success
    }
  });
}

function ajax2(){
  $.ajax({
    url: "",
    data: dataString,
    type: "POST" ,
    dataType: "text",
    cache: false,   
    success: function(response_data){

    }
  });
}
于 2013-06-10T05:24:53.263 に答える