我有一个jquery页面,可以加载存储在多个外部文件中的部分。我需要执行一个函数,但只有在触发了get和getJSON回调的所有之后才会执行。
有没有好办法呢?
目前,我要将所有get命令嵌套在一起。代码很丑陋,更糟糕的是,获取会一个接一个地执行,导致页面加载速度减慢。
答案 0 :(得分:3)
如果您使用的是> = jQuery 1.5,则可以使用$.when()
:
$.when($.getJSON('/test1'), $.getJSON('/test2')).done(function(result1, result2) {
console.log(result1[0]); //result1 is an array of the response values from test1
console.log(result2[0]);
});
.done
函数仅在所有ajax调用成功后执行。还有一种.then
方法,而不是成功和失败的功能。
答案 1 :(得分:0)
保留回复的计数/记录。
var received_responses = 0;
function is_done() {
received_responses++;
if (received_responses == 3) {
do_whatever_needs_to_be_done_afterwards();
}
}
让各种ajax中的每个“成功”处理程序调用此is_done()
函数。一旦'完成'计数达到阈值,那么你就开始了下一阶段的事情。这样你就可以一次发出所有3个ajax调用,而不必按顺序运行它们。
唯一的缺点是,如果任何调用因任何原因(net.burp,服务器故障等等)失败,则下一阶段永远不会被触发,因为计数永远不会达到阈值。您可能希望添加一个期间检查,以查看是否有任何请求停止/失败并根据需要进行处理。