JQuery等待Ajax响应

时间:2012-02-16 21:25:24

标签: javascript ajax jquery loops

我有以下代码:

    for (i=1;i<=pages;i++) {
        $('#procout').append(Processing Page#"+i+"<br />");
        $.ajax({
            url: 'processor.php',
            data: {storen: perpage, pagen : i},
            success: function(data) {
                $('#procout').append(data+"<br />");

            }
        });
    }

我要做的是让脚本在每次循环后等待Ajax响应。相反,它会打印出“处理页面”行,并按照服务器响应的顺序(乱序)打印每次运行的Ajax响应。我尝试将async选项设置为false,但这只会导致JS等待所有六个请求完成,然后从所有运行中输出所有内容。

注意:页面,perpage和pagen的值与问题无关。

1 个答案:

答案 0 :(得分:4)

因为你已经尝试过制作ajax请求async:false(这很少是一个好主意),考虑将你的循环体破坏成一个发出ajax请求的函数,然后运行下一个请求在回调中:

function runRequest(num){
    if (num > pages) return; //since your original was looping while i <= pages

    $('#procout').append("Processing Page#" + num + "<br />");
    $.ajax({
       url: 'processor.php',
       data: {storen: perpage, pagen : num},
       success: function(data) {
           $('#procout').append(data + "<br />");

           runRequest(num + 1);
       }
    });
}

然后当然用

开始这个过程
runRequest(0);