您的位置:首页 > Web前端 > JavaScript

动态加载js 文件

2013-10-18 19:40 302 查看
最近在写管理后台,用的是dwz框架.其中的页面很多都被规划好了,我仅能将在navTab里写页面。

我的经历是,我在navTab中写有

<script type="text/javascript" scr="js/ext/GLR/GLR.js">

<script type="text/javascript>

$(document).ready(function(){
GLR.create............

});

</script>

其中出现的问题是,GLR not defined,这是因为 ready这个方法在这里其中已经被dwz忽略了,那么上面的引入GLR.js 其实是异步加载。

dwz先加载其框架的js文件,并使用了类似 JQuery.ready 的初始化方法,所以你在navTab中写 $.ready是不起作用的。

必须等我引入的这个第三方js库载入后才可以执行我的业务代码,所以这里就用到了动态加载js文件。

如果仅仅是依赖这个GLR文件,那还好办,可以把业务逻辑代码写到 $.getScript 的回调函数中,

但是如果需要依赖多个文件

$.when(
$.getScript( "{{MEDIA_PREFIX}}/js/ext/jquery-color.js" ),
$.getScript( "{{MEDIA_PREFIX}}/js/ext/GLR/GLR.js" ),
$.getScript( "{{MEDIA_PREFIX}}/js/ext/GLR/GLR.messenger.js" ),
$.getScript( "{{MEDIA_PREFIX}}/js/loc/xmlEditor.js" ),
$.Deferred(function( deferred ){
$( deferred.resolve );
})
).done(function(){

//业务逻辑代码放这里

但是后来,我刷新页面的时候,重复请求这些js库文件了。原因是获取js 文件的url 被转成了 http://xxxxxxx./js/exejquery-color.js?_=1382112720
从而避免了使用缓存。(浏览器中会对使用 get 的http请求会进行缓存,同样的url 返回同样的值。一种避开缓存的方式便是为url加上时间戳)

jquery 默认 $.getScript是不使用缓存的。

那么我们可以

$.ajaxSetup({
cache: true
});
$.when(............

这样就可以使用缓存了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: