欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jquery getScript動態(tài)加載JS方法改進(jìn)詳解

 更新時(shí)間:2012年11月15日 17:08:05   作者:  
有許多朋友需要使用getScript方法動態(tài)加載JS,本文將詳細(xì)介紹此功能的實(shí)現(xiàn)方法
復(fù)制代碼 代碼如下:

$.getScript(url,callback)

這個(gè)方法是jquery自身提供的一個(gè)用于動態(tài)加載js的方法。當(dāng)網(wǎng)站需要加載大量js時(shí),動態(tài)的加載js就是一個(gè)比較好的方法,當(dāng)需要某個(gè)功能時(shí)再將相應(yīng)的js加載進(jìn)來。
但是自己在使用過程中卻發(fā)現(xiàn)了一些不盡如意的地方。


每次需要執(zhí)行該功能的時(shí)候都會去請求一次這個(gè)js,這樣不是在幫倒忙嘛?
于是找到Jquery官網(wǎng)的API說明 http://api.jquery.com/jQuery.getScript/
其實(shí)這個(gè)方法就是對ajax方法的一個(gè)封裝,可以使用ajax方法的緩存來將http狀態(tài)200變成304,從而使用客戶端的緩存:
復(fù)制代碼 代碼如下:

$.ajaxSetup({
cache: true
});

于是,會發(fā)現(xiàn)每次調(diào)用這個(gè)功能的時(shí)候,變成了如下所示:


每次調(diào)用js時(shí)后面的類似"?_=13126578"的參數(shù)已經(jīng)沒有了,并且狀態(tài)都是Not Modified。
但是我有點(diǎn)“潔癖”,每次使用這個(gè)功能,雖說服務(wù)端不用再返回整個(gè)js文件了,但是每次還是得請求一次服務(wù)器,總覺得不舒服。于是便誕生了這篇博客的標(biāo)題。
不多說,先上代碼:
復(fù)制代碼 代碼如下:

<!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">
//定義一個(gè)全局script的標(biāo)記數(shù)組,用來標(biāo)記是否某個(gè)script已經(jīng)下載到本地
var scriptsArray = new Array();
$.cachedScript = function (url, options) {
//循環(huán)script標(biāo)記數(shù)組
for (var s in scriptsArray) {
//console.log(scriptsArray[s]);
//如果某個(gè)數(shù)組已經(jīng)下載到了本地
if (scriptsArray[s]==url) {
return { //則返回一個(gè)對象字面量,其中的done之所以叫做done是為了與下面$.ajax中的done相對應(yīng)
done: function (method) {
if (typeof method == 'function'){ //如果傳入?yún)?shù)為一個(gè)方法
method();
}
}
};
}
}
//這里是jquery官方提供類似getScript實(shí)現(xiàn)的方法,也就是說getScript其實(shí)也就是對ajax方法的一個(gè)拓展
options = $.extend(options || {}, {
dataType: "script",
url: url,
cache:true //其實(shí)現(xiàn)在這緩存加與不加沒多大區(qū)別
});
scriptsArray.push(url); //將url地址放入script標(biāo)記數(shù)組中
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中代碼也就是一個(gè)函數(shù)
復(fù)制代碼 代碼如下:

function alertMe() {
alert('clicked me');
}

到這里,整個(gè)改造就完成了,當(dāng)你使用這個(gè)功能的時(shí)候,只會在初始化的時(shí)候向服務(wù)器發(fā)出一次js的請求,而加載完成后,就不會再次請求服務(wù)器了,哪怕是304狀態(tài)碼也不會有了。
 
js菜鳥一枚,還請各位輕拍,O(∩_∩)O~

相關(guān)文章

最新評論