只有当最后一个ajax请求在javascript中完成时才输入next for iteration

时间:2014-04-06 02:22:41

标签: javascript jquery ajax

我有一个数组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请求还没有完成

1 个答案:

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