jquery getScript动态加载JS方法改进详解[转载]

转载自http://www.jb51.net/article/31973.htm

有许多朋友需要使用getScript方法动态加载JS,本文将详细介绍此功能的实现方法

$.getScript(url,callback)

这个方法是jquery自身提供的一个用于动态加载js的方法。当网站需要加载大量js时,动态的加载js就是一个比较好的方法,当需要某个功能时再将相应的js加载进来。 
但是自己在使用过程中却发现了一些不尽如意的地方。

每次需要执行该功能的时候都会去请求一次这个js,这样不是在帮倒忙嘛? 
于是找到Jquery官网的API说明 http://api.jquery.com/jQuery.getScript/ 
其实这个方法就是对ajax方法的一个封装,可以使用ajax方法的缓存来将http状态200变成304,从而使用客户端的缓存:

复制代码代码如下:

$.ajaxSetup({ 
cache: true 
});

于是,会发现每次调用这个功能的时候,变成了如下所示:

每次调用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状态码也不会有了。 

时间: 2024-10-12 00:55:17

jquery getScript动态加载JS方法改进详解[转载]的相关文章

jquery如何动态加载js文件

jquery如何动态加载js文件:本章节和大家分享一下几种动态加载js文件的方法,希望能够给需要的朋友带来帮助.方法一: $.getscript("test.js"); 方法二: function loadjs(file) { var head = $('head').remove('#loadscript'); $("<scri"+"pt>"+"</scr"+"ipt>").att

JQuery 之 动态加载JS或JS文件

如果用jquery的append直接加载script标签的话,会报错的. 1.可以用 document.write() 实现加载动态JS代码. 2.可以用 getScript() 函数实现加载JS文件. $.getScript("./test.js");  //加载js文件 $.getScript("./test.js",function(){  //加载test.js,成功后,并执行回调函数   console.log("加载js文件"); }

jQuery动态加载js脚本文件

jQuery getScript()方法加载JavaScript jQuery.getScript("/path/to/myscript.js", function(data, status, jqxhr) { /* 做一些加载完成后需要执行的事情 */ }); jQuery.getScript("/path/to/myscript.js") .done(function() { /* 耶,没有问题,这里可以干点什么 */ }) .fail(function() {

jquery动态加载js/css文件方法

先来看jquery自带的getSrcript文件 方法 代码如下 复制代码 $.getScript(url,callback) 实例 代码如下 复制代码 var testVar = 'New JS loaded!'; alert(testVar); function newFun(dynParam) { alert('You just passed '+dynParam+ ' as parameter.'); } 动态调用方法 HTML代码 代码如下 复制代码 <script type="

【JS】【9】使用jQuery动态加载js文件

正文: 用法: jQuery.getScript("/path/to/myscript.js") .done(function() { /* 耶,没有问题,这里可以干点什么 */ }) .fail(function() { /* 靠,马上执行挽救操作 */ }); 例子:延迟加载一个js插件,而且在加载完成时执行它 jQuery.getScript("jquery.cookie.js") .done(function() { jQuery.cookie("

动态加载js和css的jquery plugin

一个简单的动态加载js和css的jquery代码,用于在生成页面时通过js函数加载一些共通的js和css文件. Java代码   //how to use the function below: //$.include('file/ajaxa.js');$.include('file/ajaxa.css'); //or $.includePath  = 'file/';$.include(['ajaxa.js','ajaxa.css']);(only if .js and .css files 

动态加载JS脚本的4种方法

要实现动态加载JS脚本有4种方法: 1.直接document.write <script language="javascript"> document.write("<script src='test.js'><\/script>"); </script>   2.动态改变已有script的src属性 <script src='' id="s1"></script> <

动态加载js文件

动态加载js并执行方法(先js再调用方法) 方法一:// jq封装方法获取到js成功后 再执行initMap(); jQuery.getScript()函数用于通过HTTP GET形式的加载JavaScript文件并运行它 函数可以加载跨域的JS文件.请注意,该函数是通过异步方式加载数据的. $.getScript("http://webapi.amap.com/maps?v=1.3&key=fc1cc89768a5da46f78aaed607835069",function(

兼容的动态加载JS【原】

兼容的动态加载JS 屌丝就是悲剧,五一还得宅家里写程序专研技术. 说起动态加载JS,搞web的肯定不陌生,著名的YUI库就有强大的模块化的动态加载JS机制.在代码量不断庞大的今天,动态加载JS作用还是非常明显的.事实上这门技术已经非常古老了,可是发现网络上非常多资料也相同非常古老.诶,没法,自立更生吧,人生总要不断积累的,更何况作为一个程序员呢. 关于动态JS大家比較关注的无非就两点,兼容性怎样?怎样控制是同步还是异步?如今针对常见的4种方案来分析.前3种是异步的,最后1种是同步的. 方法1: