当jquery ajax加载时阻止继续循环

时间:2014-12-12 19:32:30

标签: javascript jquery ajax

我在java脚本中有一个for循环:

for(i=1;i<=10;i++){
    $.ajax({
        type: "GET",
        url: "insert_names.php",
        success: function (data) {
            // some codes
        }
    });
}

此脚本同时发送所有ajax请求!

但它给我带来了麻烦...

如果在ajax工作时我怎么能阻止继续循环呢?

1 个答案:

答案 0 :(得分:2)

如果需要请求以串行而非并行方式执行,您可以通过稍微重新构建来实现。不要使AJAX请求同步,只需使用每个请求的响应来调用下一个请求。

考虑这样的结构:

function sendRequest() {
    $.ajax({
        type: "GET",
        url: "insert_names.php",
        success: function (data) {
            // some codes
        }
    });
}

现在请求被包装在您可以调用的函数中。因此,响应上一个请求调用它:

function sendRequest() {
    $.ajax({
        type: "GET",
        url: "insert_names.php",
        success: function (data) {
            // some codes
            sendRequest();
        }
    });
}

它开始看起来像一个标准的递归模式,所以你现在需要的只是一个终止条件。与原始循环类似,只需使用递增值:

var i = 1;

function sendRequest() {
    $.ajax({
        type: "GET",
        url: "insert_names.php",
        success: function (data) {
            // some codes
            i++;
            if (i <= 10) {
                sendRequest();
            }
        }
    });
}

然后只需调用一次即可启动它:

sendRequest();

现在请求应该按预期调用10次(除非我的数学是一个,但这应该很容易纠正),每个请求都会响应前一个请求而发生。

使用异步编程时,请勿尝试使其同步。相反,执行操作以响应回调。