利用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 相关文章推荐
潜说js对象和数组
May 25 Javascript
20个最新的jQuery插件
Jan 13 Javascript
JavaScript Function函数类型介绍
Apr 08 Javascript
原生js制作简单的数字键盘
Apr 24 Javascript
JQuery实现带排序功能的权限选择实例
May 18 Javascript
js获取本机操作系统类型的两种方法
Dec 19 Javascript
在JavaScript中模拟类(class)及类的继承关系
May 20 Javascript
ES6中箭头函数的定义与调用方式详解
Jun 02 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
深入理解react-router 路由的实现原理
Sep 26 Javascript
详解js中let与var声明变量的区别
Apr 05 Javascript
vue商城中商品“筛选器”功能的实现代码
Jul 01 Javascript
提交表单时执行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+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
JavaScript中的this机制
2016/01/30 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
Python的subprocess模块总结
2014/11/07 Python
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
Python入门之modf()方法的使用
2015/05/15 Python
python简单实现获取当前时间
2016/08/27 Python
Python元字符的用法实例解析
2018/01/17 Python
python实现SOM算法
2018/02/23 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
英语演讲开场白
2015/05/29 职场文书
在Python 中将类对象序列化为JSON
2022/04/06 Python