我有以下代码:
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的值与问题无关。
答案 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);