4

些細な質問かもしれませんが、最後の ajax 呼び出しがいつ完了したかを何らかの方法で知る方法があるかどうか疑問に思っています。3 つの非同期 ajax 呼び出しがあるとしましょう

$.ajax({
    type: "GET",
    datatype: "json",
    url: <my service url 1>
})
.done(function() {
    // handler
});

$.ajax({
    type: "GET",
    datatype: "json",
    url: <my service url 2>
})
.done(function() {
    // handler
});

$.ajax({
    type: "GET",
    datatype: "json",
    url: <my service url 3>
})
.done(function() {
    // handler
});

最初の呼び出しが開始されたときにプログレス バーを表示し、最後の呼び出しが終了したときに非表示にしたいと考えています。問題は、それらを順番に呼び出しても、呼び出しは非同期であるため、すべての呼び出しがいつ終了するかを知る方法がわからないことです。それらを別のものにネストすることもできますが、私が理解している限り、別のものが完了するのを待たなければならないため、はるかに時間がかかります。どうにかして同期する方法はありますか?

4

2 に答える 2

3

私はかつて同じ必要性を持っていました。jQuery を使用できる場合は、こちらをご覧ください: http://lostechies.com/joshuaflanagan/2011/10/20/coordinating-multiple-ajax-requests-with-jquery-when/

それ以外の場合は、各非同期処理の最後に進行状況インジケーターの更新で返される AJAX 呼び出しを介して単純なコールバック関数を渡すことができます。

于 2013-10-30T11:38:23.757 に答える
2

すでに回答済みですが、代わりにグローバルイベントの使用を検討してください -

AjaxStart - いずれかの ajax 呼び出しが開始されたときにトリガーされます
AjaxStop - すべての ajax 呼び出しが終了したときに トリガーされます

例 -

$( document ).ajaxStart(function() {
  $( "#progressBar" ).show();
});

$( document ).ajaxStop(function() {
  $( "#progressBar" ).hide();
});

ただし、最初の呼び出しが完了する前に 2 番目の呼び出しが開始されるようにするか、少なくとも最初の呼び出しが完了した直後にトリガーされるようにする必要があります。

于 2014-08-12T13:16:30.170 に答える