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 相关文章推荐
JS 实现双色表格实现代码
Nov 24 Javascript
JavaScript中json使用自己总结
Aug 13 Javascript
jquery实现列表上下移动功能
Feb 25 Javascript
基于javascript实现图片切换效果
Apr 17 Javascript
Bootstrap下拉菜单样式
Feb 07 Javascript
微信小程序商品详情页规格属性选择示例代码
Oct 30 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
angular 内存溢出的问题解决
Jul 12 Javascript
node中IO以及定时器优先级详解
May 10 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 Javascript
vue单元格多列合并的实现
Nov 26 Vue.js
uni-app 微信小程序授权登录的实现步骤
Feb 18 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自动跳转中英文页面
2008/07/29 PHP
php 过滤器实现代码
2010/08/09 PHP
详解PHP数组赋值方法
2015/11/07 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Python中自定义函数的教程
2015/04/27 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
用python实现一个简单的验证码
2020/12/09 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
什么是聚集索引和非聚集索引
2012/01/17 面试题
酒店管理毕业生自荐信
2013/10/24 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
销售工作决心书
2015/02/04 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang