为什么ajax请求没有被缓存/

时间:2014-05-01 14:24:03

标签: php jquery ajax caching

我正在尝试使用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");

当我在Google检查工具上检查请求详细信息时(在网络标签下),它第一次显示200,之后,当我滚动它时显示200(来自缓存)。为什么即使我重新加载同一页面后它第一次没有显示200(来自缓存)?

1 个答案:

答案 0 :(得分:0)

您不需要在jQuery中将cache设置为true,默认情况下这是正确的(scriptjsonp数据类型除外)。此外,该参数仅用于通过仅为HTTP GET请求的URL附加时间戳URL参数来防止缓存,否则缓存将采用浏览器的默认行为。

  

如果设置为false,则会强制请求的页面不被缓存   浏览器。注意:将缓存设置为false只能正常使用   HEAD和GET请求。它的工作原理是附加&#34; _ = {timestamp}&#34;到了   GET参数。其他类型的参数不需要   请求,但在IE8中,对已经存在的URL进行POST时除外   GET请求。

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

尝试在max-age标题中添加cache-control并随附If-Modified-Since