由于某种原因,Ajax 缓存不起作用


Ajax cache not working for some reason

我在理解为什么以及如何缓存我的 ajax 请求时遇到问题。

我已经在网上阅读了大约 50-60 篇不同的文章,说这应该有效。

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

但是当我查看Firebug或开发人员网络选项卡时。我一直看到页面加载了 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({ cache: true }(; $.ajax({ 类型:"获取", 缓存:真, 网址: '获取.php', });

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

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

所以我很困惑为什么它不会缓存它,当在线示例似乎通过指定 cache:true 来缓存它变得非常简单时。

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

如何将页面缓存一小时?

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

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

将值保持在 true 只是意味着响应的行为将像任何其他页面一样。