2014-05-01 36 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