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最佳实践观察。更新的代码片段