jquery get / getJSON:在*几个*文件加载后调用一个函数?

时间:2011-10-29 18:30:33

标签: jquery ajax get

我有一个jquery页面,可以加载存储在多个外部文件中的部分。我需要执行一个函数,但只有在触发了get和getJSON回调的所有之后才会执行。

有没有好办法呢?

目前,我要将所有get命令嵌套在一起。代码很丑陋,更糟糕的是,获取会一个接一个地执行,导致页面加载速度减慢。

2 个答案:

答案 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,服务器故障等等)失败,则下一阶段永远不会被触发,因为计数永远不会达到阈值。您可能希望添加一个期间检查,以查看是否有任何请求停止/失败并根据需要进行处理。