【发布时间】:2010-01-13 11:12:24
【问题描述】:
我正在做在线出租车预订服务,
一旦用户成功完成他的旅程,
我们显示感谢预订,我们显示预订 ID,有些人按 F5
键,所以页面刷新并插入新条目,
所以我想在我的 cashthankyou 页面上停用 F%,
谢谢 巴拉尼库马尔
【问题讨论】:
-
请注意,不只是 Windows。其他操作系统有其他组合,例如 Control+R 或 Command+R。
标签: javascript
我正在做在线出租车预订服务,
一旦用户成功完成他的旅程,
我们显示感谢预订,我们显示预订 ID,有些人按 F5
键,所以页面刷新并插入新条目,
所以我想在我的 cashthankyou 页面上停用 F%,
谢谢 巴拉尼库马尔
【问题讨论】:
标签: javascript
你不会有太多运气 - 按键的控制/检测很大程度上依赖于浏览器,通常不可能覆盖标准行为。
您需要检测并适当处理重复的表单提交,而不是这种方法:
【讨论】:
最好的选择通常是找到一种不涉及篡改浏览器功能的方法。在您的情况下,这将使用户将预订提交到插入条目的页面,然后重定向用户到一个除了显示该条目之外什么都不做的感谢页面。然后,用户将能够多次刷新页面,而不会发生任何危险。
【讨论】:
Location 标头,重定向到成功页面。如果用户随后返回,他/她将最终出现在表单页面上。
你不能。这是浏览器的编码方式,您无法从网页中禁用它。
您需要重组您的应用程序以识别此类刷新,而不是创建额外的记录。
一种方法是检查是否在几秒钟前为用户输入了一条记录,如果是这种情况,则不要插入新记录。
另一种添加插页式页面的方法,该页面将执行添加然后重定向到您的确认页面(此页面只是一个显示页面,刷新它不会做任何事情)。
【讨论】:
我不知道您是否可以禁用 F5 但可以显示某种“您确定”消息。
这可以使用在窗口重新加载或关闭之前调用的 window.onbeforeunload 来完成。
【讨论】:
他们刷新页面可能有几个原因。 Maye 他们使用了他们的后退按钮,双击您的提交按钮或其他任何加载两次的按钮。
这里有两个真正解决您问题的方法:
1) 在表单字段中输入一个随机数,将此数字与预订一起保存,然后检查您的预订表是否已经有具有该值的预订。这将阻止他们发送表单两次。
2) 保存他们最后一次完成预订的 cookie。检查此值并在五分钟内不允许新的预订。
【讨论】:
另一种方法是将您的用户重定向到感谢页面,从会话中加载 ID。
这样,当用户点击 F5 时,感谢页面将加载,并且不会再次尝试提交表单。
如果在加载感谢页面时会话中没有预订 ID,则重定向回主页或合适的错误页面。
【讨论】: