Javascript:在更改之前保留vars值

时间:2014-04-26 20:11:17

标签: javascript for-loop callback asynccallback

我有这样的事情:

for(k in array){
 var importantData = array[k];

  $.post('user/list',{name:importantData.username},function(data){
      console.log('UID of '+importantData.username+' is:'+data.id);
  });
}

问题在于“importantData”var,当我在post回调中使用它时,它总是最后一个值,所以我得到类似的东西:

米歇尔的UID是11

米歇尔的UID是6

米歇尔的UID是23

¿如何封装该var以获取每个案例的真实数据?

2 个答案:

答案 0 :(得分:1)

您可以为每次迭代创建一个范围并处理此问题。一个简单的例子可以是这样的:

for (var i =0; i<10 ; i++){
    (function(j){             
         $.get('https://stackoverflow.com',function(){
           console.log("I am from callback with the value of j ",j);
         })

     })(i);
}

通过将参数传递给IIFE来更新代码示例。

答案 1 :(得分:0)

使用$.ajax方法并设置context参数:

for(k in array) {
    var username = array[k].username;
    $.ajax({
        url: 'user/list',
        type: 'POST',
        data: { name: username },
        context: username,
        success: function(result) {
            // Here "this" will be the value you passed as context
            console.log('UID of '+ this + ' is:' + result.id);
        }
    });
  });
}