2011-10-29 3 views
3

私はいくつかの外部ファイルに保存されている部品をロードjqueryのページを持っています。私は、関数を実行する必要がありますが、唯一の後に取得し、getJSONコールバックのすべてを引き起こしました。jqueryのGET/getJSON:*いくつかの*ファイルのロード後に関数を呼び出しますか?

これを行うには良い方法がありますか?

瞬間、私はお互いの内側のgetコマンドのすべてを入れ子に思います。コードは醜いですし、悪いことに、取得は次々に実行され、ページの読み込みが減速します。

答えて

3

あなたは> = jQueryの1.5を使用している場合は、$.when()を使用することができます。

$.when($.getJSON('/test1'), $.getJSON('/test2')).done(function(result1, result2) { 
    console.log(result1[0]); //result1 is an array of the response values from test1 
    console.log(result2[0]); 
}); 

すべてのAJAX呼び出しが成功した後.done機能のみが実行されます。成功と失敗の機能を取ることができる方法よりも.thenメソッドもあります。

0

は、回答の数/ログを保管してください。

var received_responses = 0; 
function is_done() { 
    received_responses++; 
    if (received_responses == 3) { 
     do_whatever_needs_to_be_done_afterwards(); 
    } 
} 

あなたの様々なAJAXの各「成功」ハンドラは、このis_done()関数を呼び出してもらいます。 「完了」カウントがしきい値に達すると、次の段階の作業を開始します。これにより、連続して実行することなく3回のajaxコールを一度に発行できます。

唯一の欠点は、呼び出しのいずれかが、何らかの理由(net.burp、サーバーの不具合など)のために失敗した場合にカウントがしきい値に達したことがないように、次のステージがトリガされることはありません飽きないだろうということです。任意のリクエストがストール/失敗したかどうかを確認し、必要に応じてそれを処理するために、期間チェックを追加することができます。

関連する問題