2009-06-04 191 views
9

如何防止瀏覽器緩存Ajax結果?只有當瀏覽器數據被清除後,我纔有事件觸發Ajax腳本才能顯示結果。如何防止瀏覽器中的Ajax/javascript結果緩存?

在IE6和Firefox 3.0.10

+2

實際上,這是一個非常有據可查的問題。如果你是谷歌的話,我相信你可以找到一個非常全面的答案。 – jrharshath 2009-06-04 06:27:40

回答

11

測試出隨機查詢字符串添加到您發送的網址。

例如如果Ajax請求被髮送到「http://www.xyz.com/a」 然後在末尾添加一個隨機字符串:「http://www.xyz.com/a?q=39058459ieutm39

+3

...你可以在javascript中生成隨機字符串,例如:Math.floor(Math.random()* 1000000) – Manne 2009-06-04 06:21:47

+2

該解決方案有一個嚴重的缺點:如果您檢索多個文件,它會填充緩存。在我的情況下,我想保留緩存以供離線使用,所以我不想用舊版本的請求填充緩存。 – 2014-04-14 00:11:52

4

有兩種技術對於這一點,我所知道的。

  • 將某種查詢字符串添加到AJAX請求URL,以便它始終是唯一的。一毫秒時間戳(或許還有一個隨機值相結合)有利於對AJAX響應這個
  • 設置HTTP緩存控制頭,使瀏覽器不緩存它
13

隨機URL的作品,但它是一種的黑客。 HTTP有解決方案,應該可以工作。嘗試使用解決方案indicated here。基本上,設置標題:

"Pragma":   "no-cache", 
"Cache-Control":  "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", 
"Expires":   0, 
"Last-Modified":  new Date(0), // January 1, 1970 
"If-Modified-Since": new Date(0) 
+0

完美,謝謝。 (雖然看起來很奇怪,頭文件在客戶端設置而不是在服務器的響應中!) – 2010-05-11 03:04:04

8

我已經使用jQuery {緩存:false}方法,它的工作就像一個魅力。

完整的代碼示例是這樣的:

$.ajaxSetup({cache: false});