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无法执行的解决办法
Feb 25 Javascript
JS 控制非法字符的输入代码
Dec 04 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
情人节之礼 js项链效果
Feb 13 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
Jul 01 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
Feb 06 Javascript
jQuery+ajax实现实用的点赞插件代码
Jul 06 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
May 07 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 jQuery
解决layui laydate 时间控件一闪而过的问题
Sep 28 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 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/10/02 PHP
PHP 彩色文字实现代码
2009/06/29 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php删除指定目录的方法
2015/04/03 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python标准异常和异常处理详解
2015/02/02 Python
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
分析Python读取文件时的路径问题
2018/02/11 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
Jar包的作用是什么
2014/03/30 面试题
暑期社会实践学生的自我评价
2014/01/09 职场文书
文明教师事迹材料
2014/01/16 职场文书
大学生个人事迹材料
2014/01/21 职场文书
商场营业员岗位职责
2015/04/14 职场文书
windows server2008 开启端口的实现方法
2022/06/25 Servers