有許多朋友需要使用getscript方法動(dòng)態(tài)加載js,本文將詳細(xì)介紹此功能的實(shí)現(xiàn)方法
復(fù)制代碼?
$.getScript(url,callback)?
這個(gè)方法是jquery自身提供的一個(gè)用于動(dòng)態(tài)加載js的方法。當(dāng)網(wǎng)站需要加載大量js時(shí),動(dòng)態(tài)的加載js就是一個(gè)比較好的方法,當(dāng)需要某個(gè)功能時(shí)再將相應(yīng)的js加載進(jìn)來(lái)。
但是自己在使用過(guò)程中卻發(fā)現(xiàn)了一些不盡如意的地方。
每次需要執(zhí)行該功能的時(shí)候都會(huì)去請(qǐng)求一次這個(gè)js,這樣不是在幫倒忙嘛?
于是找到Jquery官網(wǎng)的API說(shuō)明 http://api.jquery.com/jQuery.getScript/
其實(shí)這個(gè)方法就是對(duì)ajax方法的一個(gè)封裝,可以使用ajax方法的緩存來(lái)將http狀態(tài)200變成304,從而使用客戶(hù)端的緩存:
代碼如下:
$.ajaxSetup({
cache: true
});
于是,會(huì)發(fā)現(xiàn)每次調(diào)用這個(gè)功能的時(shí)候,變成了如下所示:
每次調(diào)用js時(shí)后面的類(lèi)似"?_=13126578"的參數(shù)已經(jīng)沒(méi)有了,并且狀態(tài)都是Not Modified。
但是我有點(diǎn)“潔癖”,每次使用這個(gè)功能,雖說(shuō)服務(wù)端不用再返回整個(gè)js文件了,但是每次還是得請(qǐng)求一次服務(wù)器,總覺(jué)得不舒服。于是便誕生了這篇博客的標(biāo)題。
不多說(shuō),先上代碼:
代碼如下:
<!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ù)組,用來(lái)標(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è) 對(duì)象 字面量,其中的done之所以叫做done是為了與下面$.ajax中的done相對(duì)應(yīng) done: function (method) { if (typeof method == 'function'){ //如果傳入?yún)?shù)為一個(gè)方法 method(); } } }; } } //這里是jquery官方提供類(lèi)似getScript實(shí)現(xiàn)的方法,也就是說(shuō)getScript其實(shí)也就是對(duì)ajax方法的一個(gè)拓展 options = $.extend(options || {}, { dataType: "script", url: url, cache:true //其實(shí)現(xiàn)在這緩存加與不加沒(méi)多大區(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ù)
代碼如下:
function alertMe() {
alert('clicked me');
}
到這里,整個(gè)改造就完成了,當(dāng)你使用這個(gè)功能的時(shí)候,只會(huì)在初始化的時(shí)候向服務(wù)器發(fā)出一次js的請(qǐng)求,而加載完成后,就不會(huì)再次請(qǐng)求服務(wù)器了,哪怕是304狀態(tài)碼也不會(huì)有了。 ?
js菜鳥(niǎo)一枚,還請(qǐng)各位輕拍,O(∩_∩)O~
以上就是jquery getScript動(dòng)態(tài)加載JS方法改進(jìn)詳解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)