javascript - 在 FOR 循环中等待上一个 AJAX 调用

标签 javascript jquery ajax

在循环和执行下一个调用之前,我如何等到上一个 ajax 调用完成?目前代码一直循环并一次执行所有 ajax 请求!

<script>
var busy;

function check(mailpass, proxy){
    var post_data = {};
    var post_json = "";

    post_data['mailpass'] = mailpass;
    post_data['proxy'] = '108.36.248.67:17786';
    post_json = JSON.stringify(post_data);

    jQuery.ajax({
        url: '/postdata' ,
        type: "POST",
        data: {params: post_json},
        success: function(data){
            var obj = JSON.parse(data);

            if(obj.error == 0){
                //
                $("#acc-live").append(obj.msg + "<br/>");
            } else if(obj.error == 1){
                //
                $("#socks-die").append(obj.msg+ "<br/>");   
            } else if(obj.error == 2){
                //
                $("#acc-die").append(obj.msg+ "<br/>"); 
            }
        }
    }); 

}
$(document).ready(function(){
    $("#submit").click(function(){
        var lines = $("#lines").val().split('\n');


        for(var i = 0;i < lines.length;i++){
            check(lines[i], '123');
        }

    });

});
</script>

最佳答案

您可以添加计数器 (currentIndex) 并稍微重新组织代码。

var busy;
var lines;
var currentIndex = 0;

function checkNext(){

    if( currentIndex >= lines.length ){
        console.log('all done');
        return;
    }

    var mailpass = lines[currentIndex];
    var proxy = '123';

    var post_data = {};
    var post_json = "";

    post_data['mailpass'] = mailpass;
    post_data['proxy'] = '108.36.248.67:17786';
    post_json = JSON.stringify(post_data);

    jQuery.ajax({
        url: '/postdata' ,
        type: "POST",
        data: {params: post_json},
        success: function(data){
            var obj = JSON.parse(data);

            if(obj.error == 0){
                //
                $("#acc-live").append(obj.msg + "<br/>");
            } else if(obj.error == 1){
                //
                $("#socks-die").append(obj.msg+ "<br/>");   
            } else if(obj.error == 2){
                //
                $("#acc-die").append(obj.msg+ "<br/>"); 
            }

            currentIndex++; //Increase the counter
            checkNext();
        }
    }); 

}
$(document).ready(function(){
    $("#submit").click(function(){
        lines = $("#lines").val().split('\n');          
        checkNext();
    });
});

关于javascript - 在 FOR 循环中等待上一个 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667803/

相关文章:

javascript - AngularJS Animate - 首先隐藏列表

javascript - 如何循环选中的框并添加到数组

javascript - 如何使 js 警报仅在 php echo 消息上弹出,而不在其他所有内容上弹出?

javascript - onclick ajax 不起作用

c# - 如何使用 jQuery AJAX 调用 void C# Web 方法?

javascript - React-native-inline-edit 语法问题

javascript - 如何更新数据库中的所有行并在不刷新的情况下显示更新的数据?

javascript - 使对象子原型(prototype)具有父对象的上下文

javascript - 如何阻止浏览器窗口在特定大小后调整大小

javascript - 将分页点和文本标题添加到小型 jQuery 轮播