jquery動態加載JS【方法getScript】的改進


$.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~

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM