2012-02-25 12 views
0

私はいくつかのgetJSONにスクリプトを用意していますので、解決策を助けてください。いくつかのgetJSONで作業して終了まで待つ

$.getJSON('data1_get.php', {dbase: 'file1', param: '0'}, function(data_1) { 
    $.getJSON('data2_get.php', {dbase: 'file2', param: '1'}, function(data_2) { 
    for (var i=0; i<data_1.length; i++) { // about 4 rows 
     for (var k=0; k<data_2.length; k++) { // about 7 rows 
     if (data_1[i].type == data_2[k].type) { 
      if (data_2[k].switch=="1") { // possible many process 
      // check.php needed time about 3 seconds for 1 process 
      $.getJSON('check.php', {param: data_2[k].turnOn}, function(data_3) { 
       // not work 
       if (data.status) { 
       alert('working for '+data_2[k].title);\n"; 
       } 
      }); 
      } 
     } 
     } 
    } 
    }); 
}); 

私の質問は:どのように私たちはAJAXリクエストからのすべてのコールバックを取得するまで継続待っていないし、それを強制することができますか?

ありがとうございます!

+0

なぜ強制的に待機させたいですか?実行するとブラウザが完了するまでブラウザをフリーズします。 –

+0

はい、そのスクリプトは最初の実行時に1回だけであるためです。 – user1232007

+0

最初に実行された場合、なぜajaxに気をつけますか?あなたが呼び出しているphpファイルで操作を実行してjsutがjsonの結果を ' ' – prodigitalson

答えて

0

私が正しく理解している場合は、各アイテムに対して応答が受信された後にコールバックを実行する必要があります。コールバックでは、すべての応答が受信された後にカウンタをインクリメントし、カウンタがアイテムの総数と同じであるかどうかを確認します。そうであれば、最終コールバックを呼び出します。 JavaScriptはシングルスレッドなので、並行性の問題はありません。

0

$.ajaxasync: falseを使用できます(例:ここに:

しかし、ドキュメンテーションを見て:

asyncパラメータ用)

それは予想通り、これを言う:

同期要求はブラウザを一時的にロックし、要求がアクティブな間にアクションを無効にすることがあります。

つまり、必要な操作を行うと、すべてのリクエストが完了するまでブラウザがブロックされる可能性があります。多くのことが起こっていることを暗示しているように見えますが、これはユーザーが長い間あなたのページで何かをやることを潜在的に禁じます。ユーザーエクスペリエンスのために良いことではありません...

非同期呼び出しは、ブラウザのユーザーインターフェイスをブロックしませんが、ループ展開を管理する必要があります。残念ながら、これは応答性の代償です...これを達成するために必要なことは、まず、すべての呼び出しのパラメータのリストを作成し、次にそれらを1つずつ非同期に呼び出して、コールバック関数で別の呼び出しを行うことです。あなたはこのために使用することができ、このプラグインを見てみましょう:

0

基本的に、あなたはコールバックを利用することをお勧めします。 jQueryので

、それはこのようなものかもしれません:

$.ajax("/someresource", { 
    success: function() { 
     $.ajax("/somethingelse", { 
      success: function() { 
       alert("This happens after the request completes with a 200!"); 
      } 
     }); 
    } 
}); 

詳細についてはjQuery Ajax docsを参照してください。 get,、およびgetJSONのような関数は、この関数を継承して同様に動作することに注意してください。

関連する問題