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同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
jquery eval解析JSON中的注意点介绍
Aug 23 Javascript
JS+CSS实现电子商务网站导航模板效果代码
Sep 10 Javascript
js中创建对象的几种方式
Feb 05 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
jQuery位置选择器用法实例分析
Jun 28 jQuery
深入浅出vue图片路径的实现
Sep 04 Javascript
JavaScript 面向对象基础简单示例
Oct 02 Javascript
使用uni-app开发微信小程序的实现
Dec 13 Javascript
详解微信小程序中var、let、const用法与区别
Jan 11 Javascript
Vue 嵌套路由使用总结(推荐)
Jan 13 Javascript
Vue 一键清空表单的实现方法
Feb 07 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
thinkphp配置连接数据库技巧
2014/12/02 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
laravel 数据验证规则详解
2019/10/23 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
IE php关于强制下载文件的代码
2008/08/23 Javascript
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
Python实现获取某天是某个月中的第几周
2015/02/11 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
python实现彩票系统
2020/06/28 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
弘扬民族精神演讲稿
2014/05/07 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android