无论如何,一些注意事项以避免误解: - 问题是关于HTML,HTTP,Javascript和浏览器行为。我故意不谈服务器端技术,因为我觉得让那部分工作对我来说不是一个问题。 - 我不是以安全为目标,也不想限制用户做他/她的工作。实际上,我想改进用户界面。
假设我们有一个带有POST-redirect-GET表单的HTML页面。提交表单会导致服务器端验证,然后是结果或验证错误。现在假设需要几次尝试才能使所有值有效。虽然我尝试使用更改的URL,但URL保持不变。现在用户查看结果,然后想要返回链接到表单的任何页面。对于一个不错的用户界面,这应该在后退按钮上单击2次,一次从结果页面返回到表单,第二次返回到表单之前的页面。但是,用户必须单击每个失败的尝试以输入有效值。
我该如何避免这种情况?请再次注意,我不想隐藏"来自用户的任何事情,只是没有实际情况,其中无效的表单值是有用的。我发现了一个单页应用程序"由于没有填写历史记录而遭遇相关问题,但这实际上是相反的问题,而我的申请不是单页"。
作为避免历史记录条目的替代方案,我也可以通过某种方式解决问题,甚至围绕它构建良好的用户界面。但是现在,按钮显示"返回" (在导航意义上)但是"撤消" (在改变价值的意义上)到形式。人们希望后退按钮可以返回 - 他们已经有了用于撤消的ctrl-z。
直接的解决方案 - 虽然我找不到类似的东西 - 会是一个HTTP标题,上面写着"这里是您之前请求的相同资源的更新版本,注意它是如何具有相同的网址的,所以在按下后按钮时不要让它出现两次。
答案 0 :(得分:1)
我认为最简单的方法是使用ajax处理表单提交,即使它是一个多部分表单。
我会将客户端验证结合起来,为您的用户提供更快的反馈,然后在从ajax请求收到返回数据时处理服务器端验证错误。
使用此方法,您的浏览器历史记录应相对保留,并且不会以提交的成功/失败形式填充。
我个人喜欢这个客户端bootstrap验证器插件:
https://github.com/1000hz/bootstrap-validator
当我收到服务器返回的错误消息时,我也用它来更新界面。