有没有办法在等待请求完成时暂停jquery执行,以便您可以跟踪其进度?这是我的代码:
$("span").click(function() {
istrainning= true;
for (var i=0;i<1000;i++)
$.post("train.php",function(){
$(".progressbar").width((i/10)+"%");
$("label").html((i/10)+"%");
});
});
我想要陈述
$(".progressbar").width((i/10)+"%");
$("label").html((i/10)+"%");
仅在完成发布请求后执行。请帮忙。
- 编辑:
对不起。似乎我的错误是1000个请求同时完成。有没有办法做到这一点,所有请求将一次完成一个?
答案 0 :(得分:0)
他们已经在成功回调中,所以他们已经在POST完成后执行。
我相信你的问题是第一个ajax完成时循环已经完成,因此i
将永远是1000
查看http://fixingthesejquery.com/#slide55
我不认为发布1000个HTTP请求是一个特别好的主意,但为了避免i
范围问题,您可以使用闭包:
$("span").click(function() {
istrainning= true;
for (var i=0;i<1000;i++) {
$.post("train.php",(function(i){
return function() {
$(".progressbar").width((i/10)+"%");
$("label").html((i/10)+"%");
}
})(i)); // supply i as a parameter to the IIFE
}
});
答案 1 :(得分:0)
您可以将.done(function(){....})附加到代码中,以便在成功完成后运行。如果成功与否,.always()将会运行。
答案 2 :(得分:0)
问题是在循环中错误地使用了闭包变量。
$("span").click(function () {
istrainning = true;
var counter = 0,
handler = function () {
counter++;
$(".progressbar").width((counter / 10) + "%");
$("label").html((counter / 10) + "%");
}
for (var i = 0; i < 1000; i++) {
$.post("/echo/html/", {
html: '<b>' + i + '</b>'
}, handler);
}
});
演示:Fiddle - 模拟只有5个循环
注意:发送1000个ajax请求绝不是一个好设计,希望它只是为了测试一些东西