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 03 Javascript
通过隐藏option实现select的联动效果
Nov 10 Javascript
JavaScript 通过模式匹配实现重载
Aug 12 Javascript
JavaScript插件化开发教程 (二)
Jan 27 Javascript
angularJS 中input示例分享
Feb 09 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
Apr 06 Javascript
在Node.js中使用HTTP上传文件的方法
Jun 23 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
通过webpack引入第三方库的方法
Jul 20 Javascript
实例讲解vue源码架构
Jan 24 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
Apr 24 Javascript
vue实现计算器功能
Feb 22 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中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
老生常谈PHP面向对象之解释器模式
2017/05/17 PHP
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
原生JS实现留言板
2020/03/26 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
python制作最美应用的爬虫
2015/10/28 Python
python移位运算的实现
2019/07/15 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
Python devel安装失败问题解决方案
2020/06/09 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
酒店出纳岗位职责
2013/12/29 职场文书
社区志愿者心得体会
2014/01/03 职场文书
班级入场式解说词
2014/02/01 职场文书
学习交流会主持词
2014/04/01 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
公司门卫工作职责
2014/06/28 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
学校党员对照检查材料
2014/08/28 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
小学母亲节活动总结
2015/02/10 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
优秀教师工作总结2015
2015/07/22 职场文书
中秋节随笔
2015/08/15 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers