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 EasyUI API 中文文档 - Draggable 可拖拽
Sep 29 Javascript
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
js面向对象 多种创建对象方法小结
May 21 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
Jan 08 Javascript
jquery css 设置table的奇偶行背景色示例
Jun 03 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
vue中将网页打印成pdf实例代码
Jun 15 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
Jan 05 Javascript
layui多iframe页面控制定时器运行的方法
Sep 05 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
May 20 Javascript
Openlayers实现扩散的动态点(水纹效果)
Aug 17 Javascript
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
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
php抓取https的内容的代码
2010/04/06 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP强制转化的形式整理
2020/05/22 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
js密码强度校验
2015/11/10 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
layui实现三级联动效果
2019/07/26 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python3.5 创建文件的简单实例
2018/04/26 Python
python发送邮件脚本
2018/05/22 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
python如何修改文件时间属性
2021/02/05 Python
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
大学校园生活自我鉴定
2014/01/13 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
医学求职信
2014/05/28 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
部队个人年终总结
2015/03/02 职场文书