【发布时间】:2013-06-10 13:25:22
【问题描述】:
我有一系列需要按顺序运行的 ajax 调用,但不能同步运行。最好的方法是什么?
我知道我可以$.when().then(),但这仅适用于两个 ajax 调用,不是吗?理想情况下,我想做这样的事情:
var caller;
for (var i = 0; i < argObjects.length; i++) {
if (typeof caller === 'undefined') {
caller = $.when($.ajax(... data: argObjects[i]...));
}
else {
caller.then($.ajax(... data: argObjects[i]...));
}
}
换句话说,只需在then 上添加一个系列,将它们链接在一起。但这是不可能的。有没有另一种方法可以用 jQuery 做到这一点?
请务必注意,这些调用不能同时运行。我可以按照设置async: false 对它们运行一个循环,但这会在处理过程中从用户手中夺走控制权,这并不好。
另一种思考方式是在一次调用中发送所有内容......但是我如何在该任务运行时监控它的进度?假设我有 10 周的数据要更新,我希望在每周完成时收到通知。如果我发送了 10 个连续的 ajax 调用,每个调用都可以返回并告诉我它已经完成,我可以更新某种进度条。这确实是这里的最终目标。
在此期间,我将继续努力解决 jQuery 中的延迟问题。
【问题讨论】:
-
如果中间有一个请求失败,您是否要继续运行其余请求?
-
@Dogbert:不,我不想。链接
success中的调用似乎可以阻止它。 -
@slebetman - 谢谢。你的解决方案类似于 jfriend00 的,如果有点花哨!