我有一个数组noti_array,它有两个元素,noti_array [0] ='meghan& 3',noti_arra [1] ='tylor& 5',用户名和数字连接'&',在每次迭代中,我想将用户名发送到ajax请求
for(var i=0;i<noti_array.length;i++)
{
var mesg_array = new Array();
mesg_array=noti_array[i].split('&');
who_sent=mesg_array[0]; //first iteration, meghan
sent_num=mesg_array[1]; //3
//send the user name to a ajax request
$.ajax({
url:'getLastCon.php',
method:'post',
data:{who_sent:who_sent},
success:function(data){
alert(who_sent);
}
});
}
上面的代码不会警告meghan和tylor,相反,它会警告两次tylor,如果我在ajax请求后使用'break',它会仅警告meghan一次,我认为它可能是循环进入下一次迭代即使是ajax请求还没有完成
答案 0 :(得分:0)
看起来who_sent
可能是一个全局变量。在这种情况下,由于AJAX调用的异步性质,警报将触发最后指定的who_sent
值。通过添加var:who_sent
来使var who_sent = mesg_array[0];
成为局部变量或添加另一个变量。
修改强> 变量如何在循环中持续存在以上问题。我很抱歉这些信息不准确。以下代码将执行您想要的操作:
for( var i=0 ; i < noti_array.length ; i++ ) {
var mesg_array = noti_array[i].split('&');
who_sent = mesg_array[0]; //first iteration, meghan
sent_num = mesg_array[1]; //3
(function(who) {
//send the user name to a ajax request
$.ajax({
url: 'getLastCon.php',
method: 'post',
data: { who_sent:who },
success: function(data) {
alert(who);
}
});
})(who_sent);
}