1

いくつかの Ajax 呼び出しが完了した後に実行する必要がある関数があります。現在、各 AJAX 呼び出しは次々に呼び出され、現在、それぞれのコールバック内で機能しています。各 ajax 呼び出しは、それぞれのテストが true の場合にのみ実行されるため、これはプロミス チェーンの候補ですか? そして、これらの呼び出しを連続して実行する必要は必ずしもありません。最後に 1 つのコールバックを取得するだけです (実行する基準を満たしたすべての Ajax 呼び出しがそれぞれのコールバックを完了したとき)。

if(MyTest1){
  RunMyAjaxCall1(param1,param2,successAjaxCallback1,failureAjaxCallback1);
}
if(MyTest2){
  RunMyAjaxCall2(param1,param2,successAjaxCallback2,failureAjaxCallback2);
}
if(MyTest3){
  RunMyAjaxCall3(param1,param2,successAjaxCallback3,failureAjaxCallback3);
}
if(MyTest4){
  RunMyAjaxCall4(param1,param2,successAjaxCallback4,failureAjaxCallback4);
}

サンプル AJAX 呼び出し

RunMyAjaxCall1 = function (param1,param2, successCallback, failureCallback) {
    $.ajax({
        type: "POST",
        datatype: 'json',
        url: "/WebServices/GlobalWebService.asmx/webservicemethod1",
        data: JSON.stringify({ param1: param1, param2: param2 }),
        contentType: 'application/json; charset=utf-8',
        success: function (data) { successCallback(data.d); },
        error: function (data) { failureCallback(data.d) }
    });
}
4

1 に答える 1

6

これを使用できます:

var requests = [];
if (MyTest1) {
    requests.push(RunMyAjaxCall1(param1,param2,successAjaxCallback1,failureAjaxCallback1));
}
// ...continue with other if statements

$.when.apply(null, requests).always(function () {
    // All handlers used are done (either succeeded or failed)
});

あなたはAJAX呼び出しを行っていると言ったので、$.ajax. 呼び出しから返される値$.ajaxPromise. このRunMyAjaxCallXスキームが機能するには、関数がこれを返す必要があります。

を使用requestsすると、リクエストを動的にグループ化できます。ifステートメントは、どれが実行され、組み込まれるかを決定します。

を (引数として$.when渡して)使用すると、含める必要があると判断したすべての要求を含む新しい が作成されます。次に、メソッドを使用して、含まれているすべてのリクエストが完了すると実行されます。requestsPromise.always()

これが機能する例を次に示します: http://jsfiddle.net/vmw8H/

いくつかの参照:

http://api.jquery.com/jQuery.when/

http://api.jquery.com/deferred.always/

于 2013-04-09T07:10:38.233 に答える