仅当最后一个 AJAX 请求在 JavaScript 中完成时,才输入 next 进行迭代

enter next for iteration only when the last ajax request complete in javascript

本文关键字:输入 next 迭代 完成时 最后一个 AJAX 请求 JavaScript      更新时间:2023-09-26

我有一个数组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);
          }
     });
 }

上面的这段代码不会提醒梅根和泰勒,相反,它会提醒两次泰勒,如果我在 ajax 请求后使用"break",它只会提醒梅根一次,我认为这可能是循环进入下一次迭代,即使 ajax 请求还没有完成

看起来who_sent可能是一个全局变量。在这种情况下,由于 AJAX 调用的异步性质,警报将触发上次分配的值 who_sent 。使who_sent成为局部变量或通过添加 var: 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);
}