【问题标题】:Ajax cache not working for some reasonAjax 缓存由于某种原因无法正常工作
【发布时间】:2015-02-12 10:56:30
【问题描述】:

我无法理解为什么我的 ajax 请求没有被缓存以及如何被缓存。

我在网上阅读了大约 50-60 篇不同的文章,这些文章说这应该可行。

$.ajax({ 
  type: "GET",
  cache: true,
  url: 'get.php',
});

但是当我查看 firebug 或 developer net 选项卡时。我一直看到该页面正在加载 200 响应代码,这意味着它正在加载一个全新的页面而不是旧的缓存页面。

所以为了让测试更加基础,我添加了一个单独的空白页面,纯粹显示日期时间,以便查看它是否被缓存。

它不起作用,日期时间仍在更新中。

所以接下来我尝试在 get.php 上设置这样的标题:

$cache_length=600;

header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600));
header("Pragma: cache");
header("Cache-Control: max-age=$cache_length");
header("User-Cache-Control: max-age=$cache_length");
echo date('Y-m-d H:i:s');

仍然没有缓存它。

然后我尝试了这个:

$.ajax({ 
  type: "GET",
  cache: true,
  url: 'get.php',
});

还是一样的问题,没有缓存发生

然后我也试过了,还是没有缓存

$.ajaxSetup({ 缓存: true }); $.ajax({ 类型:“获取”, 缓存:真, 网址:'get.php', });

然后我尝试了这个,仍然没有缓存

$.ajaxSetup({ cache: true });
$.ajax({ 
  type: "GET",
  cache: true,
  url: 'get.php',
});

所以我很困惑为什么它不会缓存它,当网上的例子似乎很容易通过指定 cache:true 来缓存它。

无论我尝试什么,我仍然在 get.php 中看到更新的时间,让我相信缓存仍然无法正常工作,但不明白为什么

如何将页面缓存一小时?

【问题讨论】:

    标签: php jquery ajax caching


    【解决方案1】:

    我认为您误解了缓存变量的工作原理。缓存的默认值为true,因此您甚至不必设置它。它实际上并没有告诉您的浏览器、计算机或服务器缓存任何内容。该变量的主要目的是能够将其设置为false,因此它通过将"_={timestamp}" 添加到GET 参数中来强制浏览器缓存页面。

    进一步解释:http://api.jquery.com/jquery.ajax/

    将值保持为 true 仅意味着响应的行为将与任何其他页面一样。

    【讨论】:

    • 感谢您的澄清,这回答了关于 ajax 请求的初始位,那么如何获取要缓存的页面?发送响应的页面是否需要一些特定的标头来告诉浏览器缓存它?如果是这样,这在 PHP 中是如何完成的,正如您在上面看到的,我尝试了一些不起作用的方法
    • 这是一个非常开放的问题,因为有很多不同的做事方式。您在某种程度上是在正确的轨道上,但只是告诉标题缓存页面只是该过程的一个步骤。当它到达您的 PHP 代码时,它仍然会即时执行它。当你缓存一个页面时,仍然需要另外一部分来检查是否加载缓存的版本,或者动态生成它。有关基本示例,请参阅 stackoverflow.com/a/3787258/1307183
    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多