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 行背景颜色的交替显示(隔行变色)实现代码
Dec 13 Javascript
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
Nov 12 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
Mar 17 Javascript
jquery鼠标悬停导航下划线滑出效果
Sep 29 jQuery
webstorm添加*.vue文件支持
May 08 Javascript
Layui 设置select下拉框自动选中某项的方法
Aug 14 Javascript
微信小程序中如何使用flyio封装网络请求
Jul 03 Javascript
ES6中异步对象Promise用法详解
Jul 31 Javascript
使用layer.msg 时间设置不起作用的解决方法
Sep 12 Javascript
VUE使用axios调用后台API接口的方法
Aug 03 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
一个SQL管理员的web接口
2006/10/09 PHP
收藏的一个php小偷的核心程序
2007/04/09 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
PHP页面中文乱码分析
2013/10/29 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
Python实现简单字典树的方法
2016/04/29 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python 支持向量机分类器的实现
2020/01/15 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
师范生实习的个人自我鉴定
2013/10/20 职场文书
中学教师教育感言
2014/02/21 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
写给医院的感谢信
2015/01/22 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
linux下安装redis图文详细步骤
2021/12/04 Redis
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android