我有一個jquery頁面加載存儲在幾個外部文件中的部分。我需要執行一個函數,但只有在的所有的get和getJSON回調觸發後。jquery get/getJSON:在加載多個*文件後調用函數?
有沒有很好的方法來做到這一點?
目前,我將所有的get命令嵌套在一起。代碼是醜陋的,更糟的是,這些獲取被一個接一個地執行,導致頁面加載速度變慢。
我有一個jquery頁面加載存儲在幾個外部文件中的部分。我需要執行一個函數,但只有在的所有的get和getJSON回調觸發後。jquery get/getJSON:在加載多個*文件後調用函數?
有沒有很好的方法來做到這一點?
目前,我將所有的get命令嵌套在一起。代碼是醜陋的,更糟的是,這些獲取被一個接一個地執行,導致頁面加載速度變慢。
如果您使用> = 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
功能將只執行。還有一種可以採用成功和失敗功能的方法。
保持計數/記錄的響應。
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,服務器故障等),下一個階段將永遠不會被觸發,因爲計數永遠不會達到閾值。您可能需要添加週期檢查以查看是否有任何請求停滯/失敗,並根據需要進行處理。