如何将状态对象/数据传递给异步Ajax回调函数?

3
我正在一个循环作用域中执行ajax调用,我需要成功回调函数在正确的“i”中被调用。
像这样(伪JavaScript代码):
for (i = 1 ; i <= 10 ; ++i)
{
   $.ajax( { ....,
         success : function(data) {
             // I want to use the correct i HERE
         }
   });
}

很明显这种方式行不通,因为当成功回调被调用时,i值已经与回调不同步了...


您可以将AJAX调用的async参数设置为false。 - Mike H.
2
@MikeHometchko请不要这样! - A. Wolff
@A.Wolff,大多数情况下你不应该这样做,但它确实可以工作...我不知道下面的答案展示的方法...太棒了。 - Mike H.
@MikeHometchko 嗯,但这只是最糟糕的修复方案。 - A. Wolff
@A.Wolff 它有其用途,尽管相当罕见。 - Mike H.
我知道使用“async:false”调用可以解决与“i”的同步问题,但这并不符合我的要求。 - user1595443
2个回答

6

解决这个问题的标准方法是使用立即执行的函数表达式来创建闭包。

for (i = 1 ; i <= 10 ; ++i)
{
   (function (i) {
       $.ajax({
           success : function(data) {
               // I want to use the correct i HERE
           }
       });
    })(i);
}

4

只需在现场创建一个函数范围:

for (i = 1 ; i <= 10 ; ++i) {
    (function(i) {
        $.ajax({
             success : function(data) {
                console.log( i );
                 // I want to use the correct i HERE
             }
        });
    }(i));
}

我在这里得到了两个答案 :) 我喜欢这个解决方案。 - user1595443

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接