2014-05-01 61 views
0

我想使用AJAX的緩存功能。但這不符合我的要求。我想緩存我的所有請求。這是我的代碼爲什麼Ajax請求沒有得到緩存/

<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'></script> 
<script type='text/javascript'> 
jQuery(document).ready(function (jQuery) { 
    call_ajax(); 
}); 
jQuery(window).scroll(function(){ 
    call_ajax(); 
}); 
function call_ajax(){ 
    jQuery.ajax({ 
     type: "get", 
     cache : true, 
     data: {offset : 3}, 
     dataType : "html", 
     url: 'http://localhost/contents.php', 
     success: function(returnData){ 
      jQuery('.ajaxcontents').append(returnData); 
     }, 
    }); 
} 
</script> 
<div id="ajaxcontents"></div> 

在文件contents.php中,我設置標題如下。

header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+5 days")), true); 
header("Pragma: public"); 
header("Cache-Control: public"); 

當我檢查在谷歌的請求的詳細信息檢查工具(網絡標籤下)它總是顯示200,用於在第一時間和在這之後,當我滾動它顯示200(從高速緩存)。爲什麼即使在我重新加載同一頁面後,第一次不顯示200(從緩存)?

+0

@HeroFTime:其不相似。因爲我的過期標題總是在將來。 – Mic

+0

當你重新加載頁面時,你確定你還沒有進行緩存重新加載嗎?您的資產是否從緩存中返回? –

回答

0

您不需要在jQuery中將cache設置爲true,默認情況下爲true(數據類型爲scriptjsonp除外)。此外,該參數僅用於防止緩存,方法是僅爲HTTP GET請求的URL添加時間戳URL參數,否則緩存將假定瀏覽器的默認行爲。

如果設置爲false,它將強制請求的頁面不被 瀏覽器緩存。注意:將緩存設置爲false僅適用於 HEAD和GET請求。它通過將「_ = {timestamp}」附加到 GET參數來工作。不需要的參數對其他類型 請求的,除了在IE8在一個職位,以一個已經 被請求由GET的URL製造。

https://api.jquery.com/jQuery.ajax/#jQuery-ajax1

嘗試在cache-control頭添加max-age,並和相應的If-Modified-Since