Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:在更改之前保持vars值_Javascript_For Loop_Callback_Asynccallback - Fatal编程技术网

Javascript:在更改之前保持vars值

Javascript:在更改之前保持vars值,javascript,for-loop,callback,asynccallback,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回调中使用它时,它总是最后一个值,所

我有这样的想法:

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回调中使用它时,它总是最后一个值,所以我得到如下结果:

米歇尔11岁

米歇尔的名字是6

米歇尔的年龄是23岁


?如何封装该变量以获得每个案例的真实数据?

使用
$.ajax
方法并设置
上下文
参数:

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);
        }
    });
  });
}

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

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);
}

for(var i=0;iexact duplicate of也请看一看,谢谢第一个示例澄清了我的问题!我认为注释不能被标记为正确的,对吗?不是这样,不。上下文应该是一个对象(即使基本值在ES5中也可以使用)@Bergi,再次阅读问题。现在阅读答案。以及$.ajax函数的文档和
上下文
参数的含义。再次阅读会发现什么?我知道问题所在(请参阅链接副本)。解决方案是创建一个闭包。使用您可以提供给
$的上下文。ajax
也可以工作,但是
这个
值通常应该是对象。@Bergi,您似乎完全误解了我的答案。您似乎还缺少一些关于jQuery库、
$.ajax
函数和e
上下文
参数的含义,该参数将解决此特定场景中OP的问题。@Bergi,您了解
上下文
参数的含义吗?如果您没有指定
上下文
参数,您了解
成功
回调中的
内容吗?从c显然你没有。所以我邀请你阅读文档,在如此快速地评论和否决答案之前,先熟悉一下自己。请使用OP发布的代码示例,而不是一些人为的无关示例。另外,将closed over变量设为IEFE的参数也是一种很好的做法。@Bergi thanks最佳实践观察。更新的代码片段