2012-04-11 67 views
2

我通過ajax函數獲取我的網站子頁面。一切正常。但是當我檢查控制檯中的請求時,我收到以下報告爲什麼jquery GET沒有緩存結果,當它應該?

Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Connection close 
Content-Length 6663 
Content-Type text/html 
Date Wed, 11 Apr 2012 16:29:51 GMT 
Expires Thu, 19 Nov 1981 08:52:00 GMT 
Pragma no-cache 
Server LiteSpeed 
Vary Accept-Encoding, User-Agent 
X-Powered-By PHP/5.3.10 

它顯示內容未被高速緩存。它顯示過去日期的標題過期。但在ajax()的jquery頁面中,我讀到默認情況下所有的ajax調用都被緩存了。問題是什麼?這裏是我的代碼

<script type="text/javascript"> 
    $("#subpage1").click(function() { 
    $("#wrapper").empty();  
    $("#wrapper").html('loading'); 
    $.ajax({ 
     url: 'subpage/1.html', 
     success: function(data) { 
      $("#wrapper").html(data); 
     } 
    }); 
}); 
</script> 

我是jquery和ajax的新手。

+0

您是否試圖確保緩存已打開? \t $ .ajaxSetup({cache:true}); – 2012-04-11 16:46:18

+0

@PhillipWhisenhunt:在ajax()說明頁面中,它表示緩存默認爲true? – user632347 2012-04-11 16:47:34

回答

2

你只是簡單地解釋了控制檯的輸出錯誤:這是來自服務器的響應頭,它顯式地告訴客戶端不要將該響應存儲在緩存中。

如果您希望對其進行緩存,則需要在事務的服務器端進行更改,而不是在客戶端進行更改。這主要通過發送正確的標題來完成:提供將來的到期日期或根本沒有。並刪除這些「緩存」標題。然後,客戶端將發送最後一個緩存請求的日期和下一個請求(在If-Modified-Since標題中),您只需確保腳本檢查自那個日期時間之後確實是否有修改 - 如果是的話,像往常一樣返回內容,否則只需用http狀態碼304進行響應未修改。谷歌關於與緩存控制有關的http頭文件,這有點棘手。

+0

這意味着內容得到緩存?是的,它是響應標題。那麼我將如何確認內容被緩存? – user632347 2012-04-11 16:50:26

+0

你能告訴我需要做什麼服務器端更改? – user632347 2012-04-11 16:52:03

+0

不,這意味着內容不會被緩存 - 但不是因爲您在JavaScript中做錯了什麼,而是因爲服務器確實告訴瀏覽器不要。 – Niko 2012-04-11 16:52:31

相關問題