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拓展DOM操作 prependChild insertAfert
Nov 17 Javascript
ie支持function.bind()方法实现代码
Dec 27 Javascript
禁用JavaScript控制台调试的方法
Mar 07 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
Javascript动画效果(1)
Oct 11 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 Javascript
javascript数组拍平方法总结
Jan 20 Javascript
vue基于viewer实现的图片查看器功能
Apr 12 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
Nov 25 Javascript
在vue中使用console.log无效的解决
Aug 09 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
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
vue实现登录拦截
2020/06/29 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
python把转列表为集合的方法
2019/06/28 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
顶岗实习计划书
2014/01/10 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
优秀士兵个人事迹材料
2014/01/19 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
质检员岗位职责
2015/02/03 职场文书
自我工作评价范文
2015/03/06 职场文书