利用jQuery的deferred对象实现异步按顺序加载JS文件

 更新时间:2013年03月17日 10:44:56   作者:  
如果你现在对jQuery中的deferred还不了解,jQuery的deferred对象详解一文接下来介绍deferred对象如何实现异步顺序加载JS文件,感兴趣的你可以参考下哈

前段时间看了阮一峰的jQuery的deferred对象详解一文,对jQuery中的deferred的用法了一些了解,今天看到园子里的一篇文章:关于重构JS前端框架的失败经验(顺便怀念那些死去的代码),于是把我之前写的一个利用jQuery的deferred异步按顺序加载JS文件方案分享出来,欢迎指正。

如果你现在对jQuery中的deferred还不了解,强烈建议你看一下阮一峰的jQuery的deferred对象详解一文。
加载JS文件的代码如下:
复制代码 代码如下:

/*
Loading JavaScript Asynchronously
loadScript.load(["a.js", "b.js"]);
*/
var loadScript = (function() {
var loadOne = function (url) {
var dtd = $.Deferred();
var node = document.createElement('script');
node.type = "text/javascript";
var onload = function(){
dtd.resolve();
};
$(node).load(onload).bind('readystatechange', function(){
if (node.readyState == 'loaded'){
onload();
}
});
document.getElementsByTagName('head')[0].appendChild(node);
node.src = url;
return dtd.promise();
};
var load = function(urls) {
if(!$.isArray(urls)) {
return load([urls]);
}
var ret = [];
for (var i = 0; i < urls.length; i++) {
ret[i] = loadOne(urls[i]);
};
return $.when.apply($, ret);
}
return {
load: load
};
})();

代码比较简单,这里就不解释了,下面给个调用示例。
  例如项目中有两个JS文件:a.js和b.js,代码如下:
  a.js:
复制代码 代码如下:

var a = "i am in a.js";
var b = "i am in a.js";

b.js:
复制代码 代码如下:

var a = "i am in b.js";
var b = "i am in b.js";

如果我们想先载入b.js,后载入a.js,示例代码如下:
复制代码 代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Loading JavaScript Asynchronously</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"type="text/javascript"></script>
<script src="jls.js" type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
loadScript.load(["b.js", "a.js"]).done(function() {
test();
});
function test(){
console.log("var a = " + a + " , var b = " + b);
}
</script>
</body>
</html>

结果如下:

这里我们可以看到,b.js中定义的变量被a.js中的覆盖了。

转到Elements面板,我们可以看到b.js和a.js被顺序地加到了head中:

对此类问题,欢迎大家分享自己的方案。

相关文章

  • jQuery查找节点方法完整实例

    jQuery查找节点方法完整实例

    这篇文章主要介绍了jQuery查找节点方法,结合完整实例形式分析了jQuery针对DOM节点属性的相关操作技巧,需要的朋友可以参考下
    2016-09-09
  • Jquery轮播效果实现过程解析

    Jquery轮播效果实现过程解析

    这篇文章主要为大家详细的分析了Jquery轮播效果实现过程的具体步骤以及实现思路,帮助大家快速实现Jquery轮播效果,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Jquery 效果使用详解

    Jquery 效果使用详解

    jQuery是一款同prototype一样优秀js开发库类,特别是对css和XPath的支持,使我们写js变得更加方便,本篇文章给大家介绍jquery效果使用详解,感兴趣的朋友一起学习吧
    2015-11-11
  • 封装了jQuery的Ajax请求全局配置

    封装了jQuery的Ajax请求全局配置

    这篇文章主要介绍了封装了jQuery的Ajax请求全局配置的相关资料,需要的朋友可以参考下
    2015-02-02
  • js弹出层之1:JQuery.Boxy (二)

    js弹出层之1:JQuery.Boxy (二)

    在《弹出层之1:JQuery.Boxy (一)》中讲到了JQuery.Boxy的基本用法,本次讲下手动创建实例,new一个boxy对象是很容易的,传递一些参数对象就能满足不同的需求了。
    2011-10-10
  • 基于jQuery+JSON的省市二三级联动效果

    基于jQuery+JSON的省市二三级联动效果

    本文给大家分享的是利用jQuery插件,通过读取JSON数据,实现无刷新动态下拉省市二(三)级联动效果,十分的简单实用,效果也非常棒,有需要的小伙伴可以参考下。
    2015-06-06
  • jquery解析xml字符串简单示例

    jquery解析xml字符串简单示例

    这篇文章主要介绍了jquery解析xml字符串示例,需要的朋友可以参考下
    2014-04-04
  • jQuery给多个不同元素添加class样式的方法

    jQuery给多个不同元素添加class样式的方法

    这篇文章主要介绍了jQuery给多个不同元素添加class样式的方法,实例分析了addClass()方法添加样式的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • jquery遍历数组与筛选数组的方法

    jquery遍历数组与筛选数组的方法

    在jquery是遍历筛选数组有多种方法与函数了,包括有:grep、each、inArray、map同时也要以遍历json对象哦,下面给各位同学介绍一下具体的操作方法
    2013-11-11
  • jQuery模拟实现的select点击选择效果【附demo源码下载】

    jQuery模拟实现的select点击选择效果【附demo源码下载】

    这篇文章主要介绍了jQuery模拟实现的select点击选择效果,涉及jQuery响应鼠标点击动态修改页面元素样式的相关操作技巧,并附带demo源码供读者下载,需要的朋友可以参考下
    2016-11-11

最新评论