2013-10-03 73 views
0

我使用jquery getScript()調用JS。如何確保JavaScript只加載一次

有時我可以看到文件已經加載(緩存資源)。 因此,在刷新緩存頁面時不會刪除,並且同樣的文件會再次加載。

由於包含多個相同的文件,我收到錯誤。

如何避免這種情況?

$.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); });

+0

您是使用動態後端語言還是這些html頁面? – Snowburnt

+0

'if(!window.somethingInTheFile)$ .getScript(...);' – epascarello

+0

我正在使用它來編譯大豆文件。 – Sridhar

回答

1

我相信,如果它被緩存的瀏覽器不會去作出一個新的請求時,它會知道加載緩存的版本,所以你是好只是發射了您的$ .getScript你有它。

它可能會再次出現在Chrome開發人員工具的網絡選項卡中,但時間將爲0並且大小(內容)值將顯示爲'(來自緩存)'這將是測試實際內容的好方法上。

+0

但在資源(Chrome開發人員工具),我可以找到js加載兩次。 – Sridhar

+0

檢查網絡標籤,看看它是否被緩存。 – dezman

4

默認情況下,$.getScript將緩存設置設置爲false。嘗試將它設置爲true,看是否能解決您的問題:

$.ajaxSetup({ 
    cache: true 
}); 

您的通話像以前一樣添加上面:

$.ajaxSetup({ 
     cache: true 
    }); 

$.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); }); 

直接從jQuery的docs

緩存響應

默認情況下,$ .getScript()將緩存設置設置爲false。此 將時間戳查詢參數附加到請求URL,以確保 瀏覽器在每次請求時都下載腳本。您可以使用 $ .ajaxSetup():

$ .ajaxSetup({cache:true});可以覆蓋此功能。或者,您可以定義一個使用更靈活的$ .ajax()方法的新方法。

實施例實施例:定義一個$ .cachedScript()方法,其允許 獲取緩存腳本:

jQuery.cachedScript = 功能(URL,選項){// 允許用戶設置任何除外選項對於dataType,cache和url選項= $ .extend(options || {},{ dataType:「script」, cache:true, url:url}); //使用$ .ajax(),因爲它比$ .getScript更靈活//返回jqXHR對象,以便我們可以鏈回調返回 jQuery.ajax(options); }; //用法$ .cachedScript(「ajax/test.js」 ).done(function(script,textStatus){console。日誌(textStatus); });

+0

我無法理解在ajaxSetup中使用緩存的問題。我只使用getScript來加載腳本。您可以詳細闡述一下嗎? – Sridhar

+0

只需在撥打電話之前致電設置 – Evan

+0

感謝。 – Sridhar

1

假設你demo.js文件至少包含一個函數或變量,你可以再次加載之前檢查存在:

if (typeof(your_variable) === "undefined") { 
    $.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); }); 
} 

(其中your_variable裏面demo.js函數或變量的名稱)

-2

Cashingvis的一個很好的功能我解決了多次加載JS時,通過jquery之前加載II。我的問題是當我通過jquery調用一個文件加載時,我在該加載文件中有一個jquery文件,現在它只加載一次,然後我現在只能加載一次。非常感謝你,祝你有美好的一天。