2011-10-29 43 views
3

我有一個jquery頁面加載存儲在幾個外部文件中的部分。我需要執行一個函數,但只有在的所有的get和getJSON回調觸發後。jquery get/getJSON:在加載多個*文件後調用函數?

有沒有很好的方法來做到這一點?

目前,我將所有的get命令嵌套在一起。代碼是醜陋的,更糟的是,這些獲取被一個接一個地執行,導致頁面加載速度變慢。

回答

3

如果您使用> = 1.5的jQuery,你可以使用$.when():畢竟Ajax調用成功

$.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功能將只執行。還有一種可以採用成功和失敗功能的方法。

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,服務器故障等),下一個階段將永遠不會被觸發,因爲計數永遠不會達到閾值。您可能需要添加週期檢查以查看是否有任何請求停滯/失敗,並根據需要進行處理。

相關問題