2012-10-25 15 views
1

jQuery提供加載腳本文件的getScript(file,callback)函數,解釋它,然後調用callback()函數。如何加載JavaScript文件列表並在全部解釋後調用回調?

如果有多個文件需要執行回調之前加載,人們可能會認爲像這樣的一個解決方案:

function loadOrdered(files, callback) { 
    $.getScript(files.shift(), files.length 
     ? function(){loadOrdered(files, callback);} 
     : callback 
    ); 
} 

然而,這迫使一個非常特定的順序要加載的文件,這意味着瀏覽器必須等待服務器在加載下一個腳本之前做出響應。這可能會導致不必要的延遲。

如何在不強制瀏覽器按順序加載代碼的情況下實現與上述代碼相同的效果?

+0

腳本是你完全控制的東西嗎? – PhonicUK

+0

你是什麼意思?他們是否躺在我的服務器上? –

+0

是的。一種解決方案可能是在每個.js文件的末尾添加「我完成」調用並計算調用次數。但是,當然,如果有任何文件是外部的,這將不起作用。 – PhonicUK

回答

3

實際上你所描述的head.js的功能,它似乎是你在找什麼。

+0

我非常喜歡這個,但我有一個問題:當需要加載的腳本數組只在運行時確定時,如何調用head.js? –

+0

他們可以在運行時完美設置請參閱http://headjs.com/#usage – Nelson

+0

你是對的,我犯了一個錯誤。但是對於我想指定執行順序的情況,這是一個問題,或者?另外,據我所知,該庫爲HTML添加了一個

3

這裏是解決方案,我會建議:

function loadUnordered(scripts, callback){ 

var loadCount = scripts.length; 

function done(){ 
    loadCount -=1; 
    if (loadCount==0){ 
     callback(); 
    } 
} 

for (var i=0; i<scripts.length; i++){ 
    $.getScript(scripts[i], done); 
} 

} 

類似的解決方案就是在這裏發佈:Execute function after all ajax .load() requests are finished

相關問題