2012-02-24 5 views
0
for (var i = 0; i < 3; i++){ 
    $.ajax({ 
     url: "ajax.php", 
     success: function(data){ 
      alert(i); 
     } 
    }); 
} 

"0"、 "1"、 "2"のアラートを取得するソリューションが必要です。今度は "3"と3つのアラートが表示されます。jQuery。サイクル内でajaxからvarを取得する

+0

ループ内で一時変数(たとえば 'j')に値 'i'を保存し、それを' success'ハンドラで使用してみてください。 – millimoose

+0

[JavaScriptのコールバック関数の変数は常にループの最後の値を取得しますか?](http://stackoverflow.com/questions/2520587/variable-in-javascript-callback-functions-always-gets-last-value-in -loop) – Quentin

+0

私は試しました - それは動作しませんでした – Eddie

答えて

4

$.ajax()コールの周りにクロージャを配置する必要があります。私の時間Ajaxはiの値が実際に3で返すよう

for (var i = 0; i < 3; i++){ 
    (function (loop_var) { 
     $.ajax({ 
      url: "ajax.php", 
      success: function(data){ 
       alert(loop_var); 
      } 
     }); 
    })(i); 
} 

現在は3を出力しています。

for (var i = 0; i < 3; i++){ 

    (function(i){ 

    $.ajax({ 
     url: "ajax.php", 
     success: function(data){ 
     alert(i); 
     } 
    }); 

    })(i); 

} 
+0

それは動作します。ありがとう! – Eddie

+0

助けてくれて嬉しいです:-) – jabclab

2

は、非同期応答が到着するまでの値を保持しますクロージャを作成するためのコードの周りに匿名関数ラッパーを使用してください。 ajax.phpページでは、iを呼び出しページに戻す必要があります。ですから、ajax.phpページでiを返します。 jsonオブジェクトまたはパイプで区切られた簡単な文字列を使用して、ajax.phpの戻り値を格納できます。

for (var i = 0; i < 3; i++){ 
    $.ajax({ 
     data: {par: i}, 
     url: "ajax.php", 
     success: function(data){ 
      //data is a pipe-separated string 
      var cnt = data.split("|")[0]; 
      alert(cnt); 
     } 
    }); 
} 
+0

@jakeclarksonソリューションと同じです。ありがとう。また+1 – Eddie

0

がパラメータとしてajax.phpページへのI値を渡します。

関連する問題