【发布时间】:2019-03-01 02:35:57
【问题描述】:
让我们从一个典型的 PHP/html/JavaScript 环境开始。跳过<head> 和<body> 假设我们有:
<script>
var foo = <?php echo generateFoo(); ?>;
</script>
让我们假设这在各个方面都完美无缺,除了一个小缺陷。也就是说,每当我离开页面并单击“返回”时,我都会得到 foo 的旧值,而不是更新后的值。
我理解这个错误。单击“返回”从缓存加载页面,而不是从服务器加载,因此它返回到 PHP 的前一个值,而不是当前值。但是,我希望它强制更新。 (这一点尤其重要,因为用户可能正在更改另一个页面上的值,并且不是 html 专家的人会期望“返回”将您带到上一页的更新版本。代码总是更容易更改比用户行为。)
我可以写什么功能与上面的代码完全一样,但在用户导航返回时也会执行?
(我认为正确的解决方案可能使用AJAX,但也许我错了。该页面已经使用来自jquery CDN的AJAX,所以如果可以的话,我不妨使用它。)
编辑:
一种允许缓存但只更新一个变量的解决方案是理想的。但是,如果停止缓存是唯一的解决方案,我什至不知道该怎么做。所以告诉我该怎么做会很好。
直接从我的代码中复制,没有改动:
<?php
...
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0 ");
?>
所以是的,我已经尝试停止缓存。它在 BFCache 中不起作用。
【问题讨论】:
-
是的,你是对的。您应该在每个请求上获取一个新的
foo。 -
我很怀疑,但我在任何地方都找不到不更新 div 框内容的 ajax 示例。我只是不知道正确的语法。
-
不过,不确定 Ajax 请求能否解决您的问题。如果页面是从缓存中加载的,这通常意味着也不会触发任何“onload”事件。因此,除非您强制用户单击链接/按钮来触发 Ajax 请求,否则我敢打赌您最终会遇到同样的问题。
-
@MagnusEriksson 很好,这肯定可以解释为什么我找不到工作示例。
-
这个问题之前被问过很多次,得到了不同的建议和解决方案,具体取决于提问者的需求。谷歌搜索“在返回按钮上强制页面重新加载”,并检查是否有任何问题有适合您的解决方案。
标签: javascript php jquery ajax