等待FOR循环中的先前AJAX调用

时间:2014-09-04 14:16:07

标签: 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>

3 个答案:

答案 0 :(得分:3)

您可以添加计数器(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();
    });
});

答案 1 :(得分:0)

你应该看看jQuery.when():

http://api.jquery.com/jquery.when/

这将等到异步调用完成后继续

答案 2 :(得分:0)

如果您只是想等待ajax调用完成,为什么不能只使它成为async : false? (虽然我不推荐

jQuery.ajax({
    url: '/postdata' ,
    type: "POST",
    async : false, // here
    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/>"); 
        }
    }
}); 

这将使循环等到方法完成执行

相关问题