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~
您可能感興趣的文章:
- 使用jQuery動態(tài)加載js腳本文件的方法
- jquery及js實(shí)現(xiàn)動態(tài)加載js文件的方法
- 一個(gè)簡單的動態(tài)加載js和css的jquery代碼
- 三種動態(tài)加載js的jquery實(shí)例代碼另附去除js方法
- 如何使用jquery動態(tài)加載js,css文件實(shí)現(xiàn)代碼
- jquery動態(tài)加載js/css文件方法(自寫小函數(shù))
- 使用jquery動態(tài)加載Js文件和Css文件
- 使用jquery動態(tài)加載javascript以減少服務(wù)器壓力
- jquery動態(tài)加載js三種方法實(shí)例
- 使用jquery動態(tài)加載js文件的方法
- jQuery實(shí)現(xiàn)動態(tài)加載(按需加載)javascript文件的方法分析
相關(guān)文章
JQuery.validationEngine表單驗(yàn)證插件(推薦)
這篇文章主要介紹了JQuery.validationEngine表單驗(yàn)證插件(推薦)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12jquerydom對象的事件隱藏顯示和對象數(shù)組示例
本文為大家介紹下jquery的dom對象的事件隱藏顯示和對象數(shù)組,感興趣的朋友可以參下2013-12-12zTree jQuery 樹插件的使用(實(shí)例講解)
下面小編就為大家?guī)硪黄獄Tree jQuery 樹插件的使用(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09淺談JSON和JSONP區(qū)別及jQuery的ajax jsonp的使用
文章從JSON和JSONP區(qū)別開始講起,用實(shí)例來對比他們之間的不同之處,然后詳細(xì)講解了jQuery中的ajax jsonp的使用并給出了示例及詳細(xì)參數(shù)說明。這里推薦給大家,希望對小伙伴能有所幫助2014-11-11基于jQuery實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊導(dǎo)航菜單水波動畫效果附源碼下載
這篇文章主要介紹了基于jQuery實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊導(dǎo)航菜單水波動畫效果附源碼下載,需要的朋友參考下2016-01-01使用jQuery或者原生js實(shí)現(xiàn)鼠標(biāo)滾動加載頁面新數(shù)據(jù)
這篇文章主要介紹了使用jQuery或者原生js實(shí)現(xiàn)鼠標(biāo)滾動加載頁面新數(shù)據(jù)的方法,即控制滾動條下拉時(shí)的加載事件,需要的朋友可以參考下2016-03-03