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


Posted in Javascript onMarch 17, 2013

前段时间看了阮一峰的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>

结果如下:

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

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

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

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

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

Javascript 相关文章推荐
JavaScript中关于indexOf的使用方法与问题小结
Aug 05 Javascript
JS字符串截取函数实例
Dec 27 Javascript
js仿百度贴吧验证码特效实例代码
Jan 16 Javascript
js父页面与子页面不同时显示的方法
Oct 16 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
jQuery中DOM节点的删除方法总结(超全面)
Jan 22 Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 Javascript
vue自定义过滤器创建和使用方法详解
Nov 06 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 Javascript
vue用BMap百度地图实现即时搜索功能
Sep 26 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
提交表单时执行func方法实现代码
Mar 17 #Javascript
javascript中this做事件参数相关问题解答
Mar 17 #Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
Mar 17 #Javascript
Javascript跨域请求的4种解决方式
Mar 17 #Javascript
两种方法实现文本框输入内容提示消失
Mar 17 #Javascript
js 自制滚动条的小例子
Mar 16 #Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
Mar 15 #Javascript
You might like
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Python 数据结构之旋转链表
2017/02/25 Python
详解python实现线程安全的单例模式
2018/03/05 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
电子信息工程专业推荐信
2014/02/14 职场文书
职业生涯规划书范文
2014/03/10 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
主持人大赛开场白
2015/05/29 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
八年级作文之友谊
2019/12/02 职场文书