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 AjaxQueue改进步骤
Oct 06 Javascript
33个优秀的 jQuery 图片展示插件分享
Mar 14 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
Sep 19 Javascript
将json当数据库一样操作的javascript lib
Oct 28 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
Sep 29 Javascript
jQuery实现自定义事件的方法
Apr 17 Javascript
Javascript的表单验证-提交表单
Mar 18 Javascript
15位和18位身份证JS校验的简单实例
Jul 18 Javascript
JavaScript中removeChild 方法开发示例代码
Aug 15 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 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
PHP 作用域解析运算符(::)
2010/07/27 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
Python中title()方法的使用简介
2015/05/20 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python中map()函数的使用方法示例
2017/09/29 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Python子类继承父类构造函数详解
2019/02/19 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
PHP面试题大全
2015/10/16 面试题
大学自主招生推荐信
2014/05/10 职场文书
学校读书活动总结
2014/06/30 职场文书
亮剑观后感500字
2015/06/05 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers