【发布时间】:2015-08-31 11:36:41
【问题描述】:
我查看了许多类似的问题,但建议的解决方案并非在所有情况下都按预期工作。当所有 ajax 调用都成功完成时,以下代码可以正常工作,但如果任何 ajax 调用碰巧失败,则立即调用 onComplete:
var deferredArray = $('.preload').map(function() {
return $.get(this.href)
});
$.when.apply($, deferredArray).then(onComplete, onComplete);
所以可能有两种情况:
- 所有延迟调用都成功,然后调用
onComplete- 工作正常; - 某些延迟调用失败(返回 HTTP 400 错误请求),然后立即调用
onComplete,而不是等待其他延迟调用。
第二种情况代表我的问题。在调用 onComplete 之前,无论状态如何,它都应该始终等待所有调用完成。
我使用 jQuery 1.7.1,因为它内置在框架中。如果是版本问题,我可以升级,但我更愿意保留当前版本。
【问题讨论】:
-
@KrisHollenbeck 但在每个完成的 Ajax 请求上都会触发 ajaxComplete 事件。当我的所有 Ajax 请求完成时,我只需要触发一次。这就是为什么我必须使用
when。 -
对不起,我的意思是发布
ajaxStop()链接。在所有 ajax 事件完成后,我使用ajaxStop()运行东西。通常,如果我需要做某种与布局相关的 JavaScript 工作并确保数据首先到位,这会起作用。但它可能不适用于您的用例。 api.jquery.com/ajaxStop -
看起来这个问题也可能被问过。看这里..stackoverflow.com/questions/5824615/…
标签: javascript jquery ajax wait