jquery getScript動態載入JS方法改進詳解

jquery 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狀態碼也不會有了。
 
js菜鳥一枚,還請各位輕拍,O(∩_∩)O~

您可能感興趣的文章:

同步非同步動態引入js檔案的幾種方法總結javascript 動態修改css樣式方法彙總(四種方法)動態載入JS檔案的三種方法使用jQuery動態載入js指令碼檔案的方法JS動態新增option和刪除option(附例項程式碼)js給onclick事件賦值,動態傳引數例項解說js form action動態修改方法jquery及js實現動態載入js檔案的方法AngularJs根據訪問的頁面動態載入Controller的解決方案JS動態建立元素的兩種方法js動態引入的四種方法