2014-07-07 49 views
1

我正在將遠程內容加載到多個div中,並且想要測量它們並在所有加載時比較結果。什麼是最好的方式來獲得這個事件?jQuery .lastLoad的幾個事件

僞代碼:

$("#div1").load("www.foo.com/1"); 
$("#div2").load("www.foo.com/2"); 
$("#div3").load("www.foo.com/3"); 

function div1_and_div2_loaded(){ 
    alert("Success!"); 
} 

回答

1

可以使用$.when()當一組AJAX請求已經完成執行代碼。不過,您需要修改代碼才能使用$.ajax,因爲load不會返回延遲對象。試試這個:

var request1 = $.ajax({ 
    url: 'http://www.foo.com/1', 
    success: function(response) { 
     $('#div1').html(response); 
    } 
}) 

var request2 = $.ajax({ 
    url: 'http://www.foo.com/2', 
    success: function(response) { 
     $('#div2').html(response); 
    } 
}) 

$.when(request1, request2).done(function() { 
    alert('success!'); 
}); 

這種模式的優點是所有*請求將同時執行,從而導致更快的整體加載時間。

*如果您正在製作大量請求,瀏覽器可能會對請求進行排隊。

顯然你需要幹掉請求的創建,這只是一個快速和骯髒的例子。

+0

我可以通過一個列表到什麼時候? when([request1,request2]); – SverkerSbrg

+0

@SverkerSbrg不幸的不是。令人討厭的是它只接受個人論點。 http://api.jquery.com/jQuery.when/如果需要,您可以擴展它。 –

+0

呵呵,有沒有辦法動態地做到這一點?不需要將請求添加到內存中並檢查每個加載的內容。 – SverkerSbrg