2012-11-15 44 views
62

我使用getJSON從服務器端獲取結果,但面臨瀏覽器緩存問題。我想緩存是假的。我在我的getJSON調用之前嘗試使用它。如何在JQuery中爲getJSON設置緩存false?

$.ajaxSetup({ 
       cache: false 
      }) 

但是我沒有得到預期的結果。它仍然顯示舊的結果。 任何幫助將不勝感激。

我還確定了一些其他解決方案,如使用.ajax,但我真的不想使用它。

回答

105

您的代碼只需要一個觸發器即可啓用。

這將讓你在今後所有的AJAX

$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); 
}); 

禁用緩存希望它能幫助:)

+5

這設置它是全球性的,這是不好的,可以影響其他在你的程序中的**調用**需要緩存 – vsync

+1

爲什麼你會等待$(document).ready來設置該選項? –

+0

@helloChris - 這是jQuery的一個很好的解釋 「一個頁面在文檔」準備就緒「之前無法安全地進行操作。jQuery檢測到這個狀態準備就緒,代碼包含在$(document).ready()只有在頁面文檔對象模型(DOM)準備好執行JavaScript代碼時纔會運行。「 [閱讀關於API的更多內容](https://learn.jquery.com/using-jquery-core/document-ready/) – bonesnatch

73

您可以使用這個,這將在全球範圍禁用緩存:

$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); 
}); 

或者,而不是$.getJSON,僅針對此類請求禁用緩存:

$.ajax({ 
    cache: false, 
    url: "/path/to.json", 
    dataType: "json", 
    success: function(data) { 
     ... 
    } 
}); 
29

semente's和bonesnatch的回答是正確的,但是如果你想使用$ .getJSON和其他地方利用它的緩存(你不想爲所有的調用設置緩存爲false),但是你想破壞緩存僅用於一次調用,您可以將時間戳注入$ .getJSON()的data屬性中。通過爲請求的查詢字符串添加一個唯一值,該請求將始終是唯一的,不會被瀏覽器緩存 - 您將始終獲取最新數據。

龍版本:

var ts = new Date().getTime(); 
var data = {_: ts}; 
var url = '/some/path.json'; 

$.getJSON(url, data); 

All in one的版本:

$.getJSON('/some/path', {_: new Date().getTime()}); 

無論結果如下要求:

/some/path.json?_=1439315011130 

,其中在最後的數字是時間戳代碼被調用的時刻,因此將始終是唯一的。

+1

我會說遠遠地解決問題的最佳解決方案。你不需要改變你的javascript,也不需要改變全局配置,只需要傳入一個簡單的額外參數即可。 –

相關問題