2012-01-19 49 views
10

我使用getScript加入到動態加載我的插件:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js', function() { 
    //do magic 
}); 
  1. 如何禁用緩存破壞? 在它在最後生成號碼的那一刻:JS/code.photoswipe.jquery-3.0.4.min.js _ = 1326992601415 我看到了這一點,但不知道如何在我的情況下使用它:

    $.getScript = function (url, callback, cache) { 
        $.ajax({ 
         type: "GET", 
         url: url, 
         success: callback, 
         dataType: "script", 
         cache: cache 
        }); 
    }; 
    
  2. 如果我多次調用$ .getScript添加相同的js文件,它是否每次都要求獲取該文件?如果是這樣,有沒有辦法檢查我們是否已經導入了該腳本,所以我們可以避免再次爲同一個文件調用getScript?

+0

_If我多次調用$ .getScript多次添加相同的js文件,它是否請求每次獲取該文件?_沒有緩存,單獨的請求被髮送,因爲緩存破壞。通過緩存,它將從瀏覽器緩存中加載(瀏覽器可能會再次檢查服務器,以查看它是否具有最新的副本,具體取決於緩存標頭的強度)。 –

回答

-3

您的瀏覽器將緩存相應的URL已經..所以你不必擔心緩存。

然而,如果你想胸圍緩存只是一個隨機字符串添加到URL,像這樣:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js?' + Math.random(), function() { 
     //do magic 
}); 

?' + Math.random()將允許一個隨機數,以便緩存與每個請求破將追加到您的js文件該文件(因爲它隨機生成一個號碼)

+8

不,它不。如果我在同一頁面上說了$ .getScript onClick,它會在最後發送帶有不同數字的GET,例如, js/code.photoswipe.jquery-3.0.4.min.js?_ = 1326992601415 –

+0

我想要做的是在最後刪除這些數字,並點擊檢查,如果我已經有該腳本導入,所以我可以只是忽略getScript –

+0

AJAX不使用'導入'腳本的概念。每次都是一個新的調用,不同的是,你可以緩存(或不)這個響應 –

23

How to disable the cache busting

$.ajaxSetup({ 
    cache: true 
}); 

這將確保用戶抓住從腳本服務器只有一次,然後從他們的本地緩存(除非他們的瀏覽器設置阻止緩存)。

+1

警告:這將啓用對每個Ajax調用的緩存,而不僅僅是腳本調用。 –

4

不幸的是,你不能。

getScript加入然而,可以覆蓋這樣的:

$.getScript = function(url, callback, cache){ 
$.ajax({ 
     type: "GET", 
     url: url, 
     success: callback, 
     dataType: "script", 
     cache: true 
}); 
}; 

如果包括這在你的js的地方,它不會破壞現有的代碼,並且也將緩存獲取腳本。

優勢
使用上面的代碼中,你可以爲你的頁面上的所有腳本啓用緩存。所以你不需要重新指定每個腳本抓取。

+0

沒有必要。 jQuery 1.12.0和更高版本支持將選項對象傳遞給'$ .getScript',所以你可以在不重寫任何東西的情況下使用'.getScript({cache:true,url:url})''。 – oriadam

5

jQuery的文檔爲$ .getScript說getScript加入是簡寫:

$.ajax({ 
    url: url, 
    dataType: "script", 
    success: success 
}); 

http://api.jquery.com/jQuery.getScript/

這意味着你只需要一個緩存添加:真正的參數了這一點。

$.ajax({ 
    url: url, 
    cache : true, 
    dataType: "script", 
    success: success 
}); 

這樣簡單。 getScript函數沒什麼特別的,只是速記。

1

1。 jQuery 1.12。0和更高版本支持選項對象簽名:

$.getScript({ 
    url: "foo.js", 
    cache: true 
}) 

2。假設你設置了cache:true該文件將從瀏覽器緩存中加載(除非瀏覽器緩存被禁用或過期,例如當devtools打開時)

+0

缺少jQuery文檔缺少此信息。我打開了一個拉取請求來更新它。 – oriadam