2012-01-18 97 views
0

在啓動時給出了錯誤,我用手動writen這裏:http://stevesouders.com/tests/jsorder.php,這asyncroniously給出瞭如下因素計劃LO負荷JS文件:異步JavaScript加載使用jQuery

var sNew = document.createElement("script"); 
sNew.type = "text/javascript"; 
sNew.async = true; 
sNew.src = "http://yourdomain.com/main.js"; 
var s0 = document.getElementsByTagName('script')[0]; 
s0.parentNode.insertBefore(sNew, s0); 

我用這個來加載額外的jQuery插件文件。

所以頁面結構變得如下因素:

<html><head> 

    //meta-tags, css-files loading... 
    array of JS files for async load (m) 
    code for async load 
    some links to js-files (like jquery.js) 

    </head><body> 

    //page content... 

    $(document).ready(function() { 
     all jQuery stuff 
    )}; 
</body></html> 

可能有一些在結構上是錯誤的,但在Chrome 15打開頁面時,我得到錯誤,如Object [object Object] has no method 'XXX',其中XXX是從這些插件的功能,被認爲是加載異常。

順便說一句:在IE9中這個問題似乎並沒有出現。

回答

1

問題是您的代碼在document.ready下必須在加載腳本之前執行。您應該使用jQuery的getScript加入了$(文件)。就緒裏面:

$.getScript('plugin-dependency.js', function(){ 
    //Do Stuff with the loaded plugin 
}); 

這將確保該插件已經被加載後,才你的代碼運行。

More info about jQuery's getScript.

+0

如果我需要加載每個文件unside的document.ready那麼什麼是對是所有asyncronious東西? – shershen

+0

您的網頁將會全部加載文字和圖片。只有在這之後,你會打電話給其餘的依賴關係,我們會考慮那些頁面次要的員工。這是一個優化過程。 –

+0

所有使用getScript的腳本都將是異步的。你的第一個代碼的問題是某些腳本可以在它的依賴之前加載。 –