【问题标题】:JQuery Wait for Ajax ResponseJQuery 等待 Ajax 响应
【发布时间】:2012-02-16 21:25:24
【问题描述】:

我有以下代码:

    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 等待直到所有六个请求都完成,然后将所有运行的所有内容一起输出。

注意:pages、perpage 和 pagen 的值与问题无关。

【问题讨论】:

  • 你应该对“ajax queue”和“jquery ajax queue plugin”进行一些搜索,因为它看起来就是你想要的。

标签: javascript ajax jquery loops


【解决方案1】:

既然您已经尝试过发出 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);

【讨论】:

  • 循环永远不会结束...我什至将页面添加为要传递给函数的变量并检查其值。递归会导致这种情况吗?如果我保留循环并在每次运行时将处理传递给该函数会怎样?
  • 该功能应该可以工作。你确定你在回调中调用runRequest(num + 1) 吗?如果您碰巧写了runRequest(num++),那将不会起作用。
  • 是的,我使用了你的代码并确保它正确地知道“pages”的值。让我看看我是否在 jsfiddle 中构建它并为您提供链接
  • 亚当,我想通了。我在原始调用中的 runRequest() 函数的调用中添加了 pages 变量……但忘记将其添加到递归调用中。不知何故,这导致递归继续运行。
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2014-04-24
相关资源
最近更新 更多