【问题标题】:Pass PHP variable to javascript even when user clicks "back"即使用户单击“返回”,也将 PHP 变量传递给 javascript
【发布时间】: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


【解决方案1】:

Check out this thread 和代码示例:

window.addEventListener("pageshow", function (event) {
  var historyTraversal = event.persisted || 
                         (typeof window.performance != "undefined" && 
                              window.performance.navigation.type === 2);
  if (historyTraversal) {
    // Reload the page.
    window.location.reload();
  }
});

【讨论】:

  • 这需要一点时间来测试。 (我无法在本地主机上复制此问题。)我马上回来。
  • 我不明白它是如何工作的,但它确实有效。干得好。
  • 这是否意味着我现在应该删除我的标题?
  • This thread 包含对代码 sn-p 的解释。
  • 代码看起来很眼熟。我想我试过了,但失败了。尽管如此,它确实有效。无论我多么努力,我都无法打破它。最好不要猜测我尝试的最后一个代码是什么。
猜你喜欢
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2013-12-27
  • 1970-01-01
  • 2015-06-07
  • 2012-09-30
相关资源
最近更新 更多