2009-06-09 3 views
2

ページに2つの同時ajax呼び出しがあります。私はそれらの両方が完了した(そして成功した)ときに関数を呼びたいと思う。jquery ajax:すべてのリクエストが完了したときに関数を呼び出す

非効率的なソリューション:

  1. メイクAJAX呼び出しコールAの成功に、残念ながら機能

を呼び出し、通話Bの成功に

  • をコールBを作る
  • 、これにより並行性が損なわれます。

    他の方法でも同じ効果を達成できますか?

  • 答えて

    -1

    なしメイクアヤックスが同時に呼び出していない偽

    にこれら二つのvarialbesを設定する別のグローバルvarialbe ajax_call_B_complete を設定ajax_call_A_complete グローバル変数を設定します。両方のajax呼び出しの成功コールバックでは、varialbesをtrueに設定します。私はajax呼び出しAがajax_call_A_completeをtrueに設定し、ajax呼び出しBはvarialbe ajax_call_B_completeをtrueに設定することを意味します。

    これらの2つの変数の値を2秒ごとにチェックする定期的な時間を設定します。両方の変数が真の場合、依存するタスクを起動します。

    +0

    が、他の場所でそれらのフラグを設定することはできないと仮定するとシンプルなコールバックイベントは、タイマーよりもはるかに優れています。 –

    +0

    バリエーションは、AおよびB補完時に呼び出される関数を使用することができます。この関数は、呼び出す呼び出しに応じてグローバル変数を設定し、両方の変数が真であるかどうかを確認します。そうであれば、それは所望の機能を発射する。 2秒ごとにアクティブになる機能を持つよりも優れていると思う。 – Alexandre

    0
    var isASuccessful = false; 
    var isBSuccessful = false; 
    function callARequest() { 
        $.get("path/to/url", { params: list }, function() { 
         isASuccessful = true; 
         if (isBSuccessful) { 
          callMeAfterAandB(); 
         } else { 
          callBRequest(); 
         } 
        }); 
    } 
    function callBRequest() { 
        $.get("path/to/other/url", { params: list }, function() { 
         isBSuccessful = true; 
         if (isASuccessful) { 
          callMeAfterAandB(); 
         } else { 
          callARequest(); 
         } 
        }); 
    } 
    function callMeAfterAandB() { 
        // todo: something 
    } 
    
    1

    は先日this answer I gave to pretty much the same questionを見てください、そしてまた、私は(完全なコードを見て、そのページのソースを表示)をそれに行くために作成the demoを見てみましょう。それは、JavaScriptの者の本来の機能とフラグ変数で約いじくるよりも言語としての全体的な性質をはるかに効率的に利用する私見;-)

    1
    $(document).ajaxStop(function() { 
         //do your JQuery stuff; 
    }); 
    
    関連する問題