利用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表格分页实现代码
Sep 18 Javascript
jquery弹出框的用法示例(2)
Aug 26 Javascript
javascript表单验证使用示例(javascript验证邮箱)
Jan 07 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
深入解析JavaScript的闭包机制
Oct 20 Javascript
浅谈jquery的html方法里包含特殊字符的处理
Nov 30 Javascript
Angular多选、全选、批量选择操作实例代码
Mar 10 Javascript
jQuery动态追加页面数据以及事件委托详解
May 06 jQuery
详解webpack分离css单独打包
Jun 21 Javascript
基于js的变量提升和函数提升(详解)
Sep 17 Javascript
vue数组对象排序的实现代码
Jun 20 Javascript
JS代码检查工具ESLint介绍与使用方法
Feb 04 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学习 函数 课件
2008/06/15 PHP
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php中session与cookie的比较
2015/01/27 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
微信小程序关键字变色实现代码实例
2019/12/13 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
2019/12/16 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python中的集合介绍
2019/01/28 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
房地产融资计划书
2014/01/10 职场文书
企业授权委托书范本
2014/04/02 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
JS封装cavans多种滤镜组件
2022/02/15 Javascript
Java实现二分搜索树的示例代码
2022/03/17 Java/Android