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 相关文章推荐
一个加载js文件的小脚本
Jun 28 Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
纯JS前端实现分页代码
Jun 21 Javascript
ionic组件ion-tabs选项卡切换效果实例
Aug 27 Javascript
Vuejs第十篇之vuejs父子组件通信
Sep 06 Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
Jan 16 Javascript
小程序云开发部署攻略(图文教程)
Oct 30 Javascript
layui prompt 设置允许空白提交的方法
Sep 24 Javascript
Node.js API详解之 readline模块用法详解
May 22 Javascript
javascript全局自定义鼠标右键菜单
Dec 08 Javascript
Javascript中的奇葩知识,你知道吗?
Jan 25 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
javascript如何实现create方法
2019/11/04 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
Python Web服务器Tornado使用小结
2014/05/06 Python
Python对象体系深入分析
2014/10/28 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
浪费资源的建议书
2014/03/12 职场文书
车辆工程专业求职信
2014/04/28 职场文书
高三励志标语
2014/06/05 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
写给老婆的保证书
2015/02/27 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python
Go语言编译原理之源码调试
2022/08/05 Golang