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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
js window.event对象详尽解析
Feb 17 Javascript
两个select之间option的互相添加操作(jquery实现)
Nov 12 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
Feb 11 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
Apr 18 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
jquery库文件略庞大用纯js替换jquery的方法
Aug 12 Javascript
Ionic如何创建APP项目
Jun 03 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 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
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
使用js实现数据格式化
2014/12/03 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
python连接mysql实例分享
2016/10/09 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
Python csv模块使用方法代码实例
2019/08/29 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
酒店服务实习自我鉴定
2013/09/22 职场文书
探亲邀请信范文
2014/01/30 职场文书
初中新生军训方案
2014/05/13 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
公司仓库管理制度
2015/08/04 职场文书
《火烧云》教学反思
2016/02/23 职场文书
2016春季运动会开幕词
2016/03/04 职场文书