JQuery的等待Ajax响应
我有以下代码:JQuery的等待Ajax响应
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的值与问题无关。
由于您已经尝试了制作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);
,因为同步不会给页面更新时间。 – epascarello 2012-02-16 21:33:03
循环永远不会结束......我甚至将页面添加为一个变量以传递给函数并检查其值。递归是否会造成这种情况?如果我保持循环并在每次运行中将处理过程传递给此函数,该怎么办? – 0pt1m1z3 2012-02-16 22:17:03
该功能应该可以工作。你确定在回调中调用'runRequest(num + 1)'吗?如果碰巧你写了'runRequest(num ++)',那**不会**工作。 – 2012-02-16 22:24:54
你应该做的“阿贾克斯队列”和“jQuery的AJAX队列插件”一些搜索,因为它看起来这是你的愿望。 – 2012-02-16 21:56:10