【问题标题】:Why ajax requests are not getting cached/为什么ajax请求没有被缓存/
【发布时间】:2014-05-01 14:24:03
【问题描述】:

我正在尝试使用 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(来自缓存)?

【问题讨论】:

  • @HeroFTime :它不相似。因为我的过期标头总是在未来。
  • 当您重新加载页面时,您确定您没有同时进行缓存重新加载吗?您的任何资产是否从缓存中返回?

标签: php jquery ajax caching


【解决方案1】:

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

如果设置为 false,它将强制请求的页面不被缓存 浏览器。注意:将缓存设置为 false 仅适用于 HEAD 和 GET 请求。它通过将“_={timestamp}”附加到 获取参数。其他类型不需要该参数 请求,但在 IE8 中,当对已经存在的 URL 进行 POST 时 已被 GET 请求。

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

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

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2023-03-25
    • 2023-03-20
    • 2010-10-13
    相关资源
    最近更新 更多