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中dom操作和事件的实例学习-表单验证
Nov 30 Javascript
jQuery LigerUI 使用教程表格篇(1)
Jan 18 Javascript
JS控件的生命周期介绍
Oct 22 Javascript
Knockout visible绑定使用方法
Nov 15 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
Angularjs 创建可复用组件实例代码
Oct 09 Javascript
jquery.validate表单验证插件使用方法解析
Nov 07 Javascript
用原生js做单页应用
Jan 17 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
vue组件创建的三种方式小结
Feb 03 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
合作指挥官:孟斯克
2020/03/16 星际争霸
php的memcache类分享(memcache队列)
2014/03/26 PHP
PHP生成二维码的两个方法和实例
2014/07/01 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
php swoft框架实例用法
2020/12/22 PHP
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
Python lxml模块安装教程
2015/06/02 Python
在Django中使用Sitemap的方法讲解
2015/07/22 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python实现的特征提取操作示例
2018/12/03 Python
pymysql模块的操作实例
2019/12/17 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
毕业生的自我鉴定
2013/10/29 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
生产文员岗位职责
2014/04/05 职场文书
党员对照检查材料
2014/09/22 职场文书
简易离婚协议书范本
2014/10/24 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫