2016-04-21 30 views
0

令我惊讶,我无法找到任何有关此主题的信息,但是,搜索这样的东西总是会产生很多类似但无关的东西......避免“撤消”历史条目回扣表格

无论如何,一些注意事项以避免误解: - 问题是关于HTML,HTTP,Javascript和浏览器行为。我故意不谈论服务器端技术,因为我认为制作该部分对我来说不会是一个问题。 - 我不是瞄准安全,也不想限制用户的行为。其实我想改进的UI。

假设我们有一个带有POST-redirect-GET表单的HTML页面。提交表单会导致服务器端验证,然后是结果或验证错误。现在假设需要几次尝试才能使所有值都有效。网址保持不变,尽管我尝试过使用更改的网址。现在用户查看结果,然后想要返回链接到表单的任何页面。对于一个很好的用户界面,这应该在后退按钮上点击2次,一次从结果页面返回到表单,另一次返回到表单之前的页面。但是,用户必须点击每次尝试失败才能输入有效值。

我该如何避免这种情况?再次注意,我不想从用户那里“隐藏”任何东西,只是没有实际的情况下无效的表单值是有用的。我发现一些“单页面应用程序”由于没有填充历史记录而受到相关问题的影响,但这实际上是相反的问题,而我的应用程序不是“单页面”。

作为一种避免历史记录的替代方案,我也很好地以某种方式侧向解决问题,甚至围绕它建立良好的用户界面。但是现在,该按钮表示“返回”(在导航的意义上),但是在表单上做了“撤消”(在改变值的意义上)。人们期望返回按钮返回 - 他们已经有ctrl-z撤销。

直截了当的解决方案 - 虽然我找不到那样的东西 - 会是一个HTTP标头,它说:“这是您之前请求的相同资源的更新版本,请注意它具有相同的URL,所以当后退按钮时不会出现两次“。

+0

您是指浏览器后退按钮还是页面上的链接? –

+0

浏览器后退按钮。对于“后退”链接,我很明显可以发送任何我想要的回应。 –

回答

1

我认为最简单的方法是使用ajax来处理表单提交,即使它是一个多部分表单。

我会有一个客户端验证的组合,以给您的用户更快的反馈,然后当您从ajax请求收到您的返回数据时处理服务器端验证错误。

使用此方法,您的浏览器历史记录应相对保留,并且不会填写成功/失败表单提交。

我个人很喜欢这个客户端引导验证插件:

https://github.com/1000hz/bootstrap-validator

我还用它来更新界面时,我得到一个错误信息从服务器返回。

+0

听起来不错,虽然我在接受这个之前正在等待更多答案。作为进一步评论者的一个说明,请不要过于详细地进行客户端验证,因为(1)这是一个相当简单的问题,恕我直言,(2)我的服务器端框架支持AJAX表单的服务器端验证,所以验证本身或多或少是一个解决的问题。 –