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

时间:2015-01-04 22:06:42

标签: php html google-chrome symfony caching

我在Symfony2中使用Post / Redirect / Pattern作为简单表单。此表单包含 id 文本字段,该字段在控制器中使用随机值动态填充。

我注意到Chrome中有一些奇怪的行为 - 如果用户提交表单然后再点击回来,则 id 字段包含一个全新的值。如果我编辑此ID然后重复此过程,则会被缓存,因此如果Chrome看到值已更改,则看起来只会阻止缓存。

此行为不会在Firefox或Safari中出现。有没有办法让Chrome以同样的方式运行? this question中的答案说问题在于使用隐藏字段,但由于我只是在使用标准文本字段而感到茫然。

3 个答案:

答案 0 :(得分:4)

据我所知,没有标准规定这里​​应该发生什么。因此,您无法真正依赖浏览器行为。

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

答案 1 :(得分:3)

我建议您使用本地存储来解决此问题。

<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控制台,

资源 - &GT;本地存储 - &gt;你的Sitename

答案 2 :(得分:2)

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

<input value="SOME_VALUE">

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