为什么 Chrome 不缓存我的动态表单字段?

Why doesn't Chrome cache my dynamic form field?

我正在关注 Post/Redirect/Pattern Symfony2 中的简单表单。此表单包含一个 id 文本字段,它在控制器中动态填充一个随机值。

我注意到 Chrome 中有一些奇怪的行为 - 如果用户提交表单然后单击返回,id 字段包含一个全新的值。如果我编辑这个 id 然后重复这个过程,值 确实 被缓存,所以它看起来 Chrome 只有在看到值已经改变时才去缓存它。

此行为不会在 Firefox 或 Safari 中发生。有没有办法让 Chrome 以同样的方式执行? this question 中的一个答案说问题在于使用隐藏字段,但由于我只是使用标准文本字段,所以我不知所措。

据我所知,没有标准规定这里​​应该发生什么。所以你不能真正依赖浏览器的行为。

因此,如果当用户按下后退按钮时它应该是新 ID 对您来说真的很重要,那么请使用一些客户端脚本实现它。无论使用什么浏览器。

大多数现代浏览器都会缓存表单输入值。因此,当用户刷新页面时,输入具有相同的值。因此,浏览器获取 html 并使用该值进行输入。

<input value="SOME_VALUE">

但是,如果用户修改了该字段,浏览器将使用用户的值而不是 html 的值。 我建议您将 autocomplete="off" 添加到您的 ID 字段。

我建议你使用本地存储来解决这个问题。

<input id="some_id">

<script type="text/javascript">

   localStorage.setItem("ID", "Some Id Value");

   if(! localStorage.getItem("ID"))
     localStorage.setItem("ID", "Some Id Value"); `

     $("#some_id").val(localStorage.getItem("ID"));
</script>

您可以检查本地存储是否可用..

if( typeof(Storage) !== "undefined" ) {
 // Your Browser support Local Storage
} else {
 // Your Browser does not support Local Storage
}

并使用 Chrome 的控制台进行跟踪。我无法为此上传图片。打开Chrome的控制台,

资源-> 本地存储-> 您的站点名称