2015-11-02 77 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放回页眉时,