jquery getScript动态加载JS方法改进详解


Posted in Javascript onNovember 15, 2012
$.getScript(url,callback)

这个方法是jquery自身提供的一个用于动态加载js的方法。当网站需要加载大量js时,动态的加载js就是一个比较好的方法,当需要某个功能时再将相应的js加载进来。
但是自己在使用过程中却发现了一些不尽如意的地方。

jquery getScript动态加载JS方法改进详解


每次需要执行该功能的时候都会去请求一次这个js,这样不是在帮倒忙嘛?
于是找到Jquery官网的API说明 http://api.jquery.com/jQuery.getScript/
其实这个方法就是对ajax方法的一个封装,可以使用ajax方法的缓存来将http状态200变成304,从而使用客户端的缓存:
$.ajaxSetup({ 
cache: true 
});

于是,会发现每次调用这个功能的时候,变成了如下所示:

jquery getScript动态加载JS方法改进详解


每次调用js时后面的类似"?_=13126578"的参数已经没有了,并且状态都是Not Modified。
但是我有点“洁癖”,每次使用这个功能,虽说服务端不用再返回整个js文件了,但是每次还是得请求一次服务器,总觉得不舒服。于是便诞生了这篇博客的标题。
不多说,先上代码:
<!DOCTYPE html > 
<html> 
<head> 
<meta charset="utf-8"> 
<title></title> 
<script src="jquery-1.7.2.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
//定义一个全局script的标记数组,用来标记是否某个script已经下载到本地 
var scriptsArray = new Array(); 
$.cachedScript = function (url, options) { 
//循环script标记数组 
for (var s in scriptsArray) { 
//console.log(scriptsArray[s]); 
//如果某个数组已经下载到了本地 
if (scriptsArray[s]==url) { 
return { //则返回一个对象字面量,其中的done之所以叫做done是为了与下面$.ajax中的done相对应 
done: function (method) { 
if (typeof method == 'function'){ //如果传入参数为一个方法 
method(); 
} 
} 
}; 
} 
} 
//这里是jquery官方提供类似getScript实现的方法,也就是说getScript其实也就是对ajax方法的一个拓展 
options = $.extend(options || {}, { 
dataType: "script", 
url: url, 
cache:true //其实现在这缓存加与不加没多大区别 
}); 
scriptsArray.push(url); //将url地址放入script标记数组中 
return $.ajax(options); 
}; 
$(function () { 
$('#btn').bind('click', function () { 
$.cachedScript('t1.js').done(function () { 
alertMe(); 
}); 
}); 
$('#btn2').bind('click', function () { 
$.getScript('t1.js').done(function () { 
alertMe(); 
}); 
}); 
}); 
</script> 
</head> 
<body> 
<button id="btn">自定义的缓存方法</button> 
<br /> 
<button id="btn2">getScript</button> 
</body> 
</html>

其中t1.js中代码也就是一个函数
function alertMe() { 
alert('clicked me'); 
}

到这里,整个改造就完成了,当你使用这个功能的时候,只会在初始化的时候向服务器发出一次js的请求,而加载完成后,就不会再次请求服务器了,哪怕是304状态码也不会有了。
jquery getScript动态加载JS方法改进详解 
js菜鸟一枚,还请各位轻拍,O(∩_∩)O~
Javascript 相关文章推荐
Javascript计算时间差的函数分享
Jul 04 Javascript
关于img的href和src取变量及赋值的方法
Apr 28 Javascript
js获取UserControl内容为拼html时提供方便
Nov 02 Javascript
学习javascript面向对象 javascript实现继承的方式
Jan 04 Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 Javascript
快速入门Vue
Dec 19 Javascript
vue引入swiper插件的使用实例
Jul 19 Javascript
浅谈手写node可读流之流动模式
Jun 01 Javascript
Vue插槽原理与用法详解
Mar 05 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
Jun 08 Javascript
深入解析微信小程序开发中遇到的几个小问题
Jul 11 Javascript
CocosCreator入门教程之网络通信
Apr 16 Javascript
javascript 图片裁剪技巧解读
Nov 15 #Javascript
中国地区三级联动下拉菜单效果分析
Nov 15 #Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
Nov 15 #Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
Nov 14 #Javascript
ko knockoutjs动态属性绑定技巧应用
Nov 14 #Javascript
Jquery颜色选择器ColorPicker实现代码
Nov 14 #Javascript
jquery offset函数应用实例
Nov 14 #Javascript
You might like
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
php新建文件的方法实例
2019/09/26 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
django认证系统 Authentication使用详解
2019/07/22 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
什么是设计模式
2012/06/17 面试题
副总经理岗位职责范本
2014/09/30 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
综合测评个人总结
2015/03/03 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
Python requests用法和django后台处理详解
2022/03/19 Python