2012-02-24 69 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

尝试将值'i'保存到循环内的临时变量(例如'j')中,并在'success'处理程序中使用。 – millimoose 2012-02-24 13:34:12

+0

[JavaScript中的回调函数中的变量总是得到循环中的最后一个值的可能的重复?](http://stackoverflow.com/questions/2520587/variable-in-javascript-callback-functions-always-gets-last-value-in -loop) – Quentin 2012-02-24 13:36:10

+0

我试过了 - 它不起作用 – Eddie 2012-02-24 13:36:37

回答

4

你需要在你的$.ajax()电话附近放一个闭合。

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

目前,它的输出3为我当时的阿贾克斯返回i值的确3

+0

这是有效的。谢谢! – Eddie 2012-02-24 13:41:04

+0

很高兴帮助:-) – jabclab 2012-02-24 13:41:18

2

可以使用匿名函数来包裹代码来创建一个封闭,将保持该值,直到异步响应到达:

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

    (function(i){ 

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

    })(i); 

} 
+0

同@jakeclarkson解决方案 - 它的工作原理。谢谢。还有+1 – Eddie 2012-02-24 13:41:44

0

I值传递给ajax.php页面作为参数。 ajax.php页面必须将我返回到调用页面。所以让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); 
     } 
    }); 
}