2010-08-16 155 views
2

时没有违反页面我有一个表格,我正在试图防止重复提交,这是相当简单的页面(如果任何人的好奇,我用这个防止重复的表单提交,同时单击后退按钮

$("form").submit(function() 
{ 
    setTimeout(function() 
    { 
     $("input").attr("disabled", "disabled"); 
    }, 50); 
}); 

...这是我从this page偷了,并能正常工作正如预期的那样,在输入被禁止迅速,预期提交表单,用户会被重定向

这里是我的问题:我预计用户使用后退按钮有时而不是页内导航,所以我希望页面能够正常工作点击后退按钮。但是,当我在成功发布后单击后退按钮时,我将返回到前一页,禁用所有输入(如您可能已知会发生的情况)。我希望他们在点击后退按钮后能够使用该页面,如果他们愿意的话。

我第一次尝试使用头文件/元标记来告诉浏览器不要缓存页面,但这并不起作用(在Firefox 3.6.8中) - 然后我决定我不想这样做,因为它可能不会跨浏览器兼容,并且可能不是最佳做法(here就是这样一种情况)。我不想使用任何能够“断开”后退按钮的事情,就像我看过的一些应用程序一样(例如,当用户点击它时,它不会将它们带回页面,而是强制它们留在该页面上),这对我来说似乎是一个糟糕的主意。有谁知道一种方法,我可以防止重复表单提交在客户端没有呈现页面无用,当用户点击后退按钮? (万一它很重要,我使用ASP.NET MVC 1)。

回答

0

好吧,这听起来不像其他人想到一个更好的主意,并发布它。我注意到我们自己的Stack Overflow具有相同的行为(至少在Ask Question页面上),禁用了Submit按钮,当我点击“Back”时,该按钮仍然被禁用。也许我可以做的最好的做法是禁用按钮,从而迫使他们手动刷新页面,或者(希望)鼓励他们在可能的情况下使用站点导航而不是后退按钮。

如果其他人有更好的想法,但我仍然对他们开放。

0

为什么不为每个表单创建一个唯一的随机密钥,然后当它被提交时,将密钥插入到数据库中,然后如果该密钥已经存在于数据库中,表单已经被提交,所以不要再次处理数据......这样你就不会修改DOM,并且可以确保数据的完整性。

+0

这是一个好主意,可以防止服务器上的表单重复处理。尽管如此,我在这个问题背后的想法是如果可能的话,阻止客户采取行动。显然,我们也必须在后端处理它,但我想尽量避免任何客户端操作。 – Andy 2013-02-18 21:38:52