2015-11-02 85 views
0

我正在研究js腳本加載技術,並希望在加載所有內容/資源時顯示自定義加載器。下面的工作,據我所知可以加載js腳本,但我的web應用程序在啓動後會拋出一些錯誤。JS腳本加載

我的問題是:下面的腳本(我的HTML底部的jQuery之後,它被稱爲<script>)與僅僅將所有這些js腳本命名爲<script>位於HTML頭部中的區別如何?爲什麼在一個錯誤而不是另一個錯誤?

$(document).ready(function(){ 
    jLoader(scripts[0]); 
}); 
var i = 0; 
function jLoader (script){ 
    return $.ajax({ 
       method: "GET", 
       dataType: "script", 
       url: script, 
       context: document.body, 
       cache:true, 
     }).done(function() { 
     console.log(script + ' loaded!'); 
     step(); 
     } 
    }); 
} 

function step(){ 
    i = i + 1; 
    jLoader(scripts[i]); 
} 

var scripts = ['js/materialize.js','http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js','js/leaflet.awesome-markers.js',  
    'js/bouncemarker.js','https://cdn.firebase.com/js/client/2.3.1/firebase.js','js/geofire.min.js','js/myScript.js']; 
+0

好吧,包括使用腳本標籤的腳本效率更高,但是如果你製作插件或類似的東西,而且你不想讓用戶必須包含大量其他文件,那麼你可以做一些類似你的事情已經完成了,儘管有更好的方法去做。 –

回答

1

有一個右大括號step();

後太多當你把變量定義在上面它應該工作::

var i = 0; 
var scripts = ['http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js','https://cdn.firebase.com/js/client/2.3.1/firebase.js']; 
$(document).ready(function(){ 
    jLoader(scripts[0]); 
}); 

function jLoader (script){ 
    return $.ajax({ 
       method: "GET", 
       dataType: "script", 
       url: script, 
       context: document.body, 
       cache:true, 
     }).done(function() { 
     console.log(script + ' loaded!'); 
     step(); 
    }); 
} 

function step(){ 
    i = i + 1; 
    jLoader(scripts[i]); 
} 

至少在這裏它:http://jsfiddle.net/adweqcm2/

但請記住:在生產環境中,建議連接腳本。

+0

謝謝。 Re級聯中,有一些CDN上可用,如firebase。但是,是的,這正是我所讀到的 - 將它們全部打包成一個js文件。我明白那就是requirejs如何準備它們。 –

+0

事情是,所示的腳本運行正常(每個控制檯的反饋),但我的應用程序失敗。當我把所有的js放回頁眉時,