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 相关文章推荐
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
jquery的Tooltip插件 qtip使用详细说明
Sep 08 Javascript
基于json的jquery地区联动效果代码
Jul 06 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
老生常谈js动态添加事件--- 事件委托
Jul 19 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
Nov 22 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
May 01 Javascript
layui下拉框获取下拉值(select)的例子
Sep 10 Javascript
layui内置模块layim发送图片添加加载动画的方法
Sep 23 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 Javascript
原生JS生成指定位数的验证码
Oct 28 Javascript
教你一步步实现一个简易promise
Nov 02 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
drupal 代码实现URL重写
2011/05/04 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
基于javascript实现的搜索时自动提示功能
2014/12/26 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
如何编写jquery插件
2017/03/29 jQuery
node错误处理与日志记录的实现
2018/12/24 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python Paramiko模块的安装与使用详解
2016/11/18 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
python中class的定义及使用教程
2019/09/18 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
什么是Smart Navigation?
2016/07/03 面试题
打架检讨书100字
2014/01/19 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
人事文员岗位职责
2014/02/16 职场文书
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL