我有一个包含多个值的变量(对象)。
对于这些值中的每一个,我都执行一个AJAX,其中包含"post"one_answers"done"方法,如下所示。
你能帮我理解为什么变量"counter"在循环中很好地递增吗(第一个console.log显示,1,2,3,4,…)。
但是当循环结束时,第二个"console.log"显示"counter"为0?我错过什么了吗?
$('.confirm_suppression').on('click',function(){
var counter = '0';
$.each(row_to_delete, function(data){
$.post(
"/mysql/function_manager.php",
{
'type_request' : 'remove_user_from_host',
'user_id' : iduser,
'host_id' : row_to_delete[data].id
},
"json"
).done(function(data) {
var array = JSON.parse(data);
if(array.status == 'OK'){
++counter;
console.log('value counter in loop : ' + counter);
$('#dialogboxhead').val('in progress');
};
if(array.status == 'KO'){
alert(array.msg);
};
});
});
console.log('value counter : ' + counter);
});
`
谢谢。
因为您使用$.post
执行异步任务,所以称为AJAX调用。这意味着,如果AJAX调用完成,done()
部分将被调用。虽然这个AJAX调用需要一些时间,但函数的其余部分将被执行。所以这个部分console.log('value counter : ' + counter);
在这个部分console.log('value counter in loop : ' + counter);
之前被调用。