我有一个页面,其中有一个表单,我试图阻止重复提交,这是相当简单的(如果有人好奇,我用这个
$("form").submit(function()
{
setTimeout(function()
{
$("input").attr("disabled", "disabled");
}, 50);
});
...我从this page偷走了,它运作正常。正如预期的那样,输入被快速禁用,表单按预期提交,并且用户被重定向。
这是我的问题:我预计用户有时会使用“后退”按钮而不是页面内导航,所以如果他们点击“返回”按钮,我希望页面能够正常运行。但是,当我在成功发布后单击“后退”按钮时,我将返回上一页,所有输入都被禁用(您可能已经知道会发生这种情况)。我希望他们能够在点击“返回”按钮后使用该页面。
我首先尝试使用header / meta标签告诉浏览器不要缓存页面,但这不起作用(在Firefox 3.6.8中) - 然后我决定我不想这样做,因为它可能不是跨浏览器兼容的,并且可能不是最佳实践(here就是这样一种情况)。我不想像我见过的那些应用程序一样使用任何“打破”Back按钮的东西(比如,当用户点击它时,它不会将它们带回页面,但会强制它们留在该页面上),这对我来说似乎是一个坏主意。有没有人知道我可以阻止客户端重复表单提交的方式,而不会在用户单击“返回”按钮时使页面无效? (如果它很重要,我正在使用ASP.NET MVC 1。)
答案 0 :(得分:0)
嗯,这听起来并不像其他人想到更好的主意并发布了它。我注意到我们自己的Stack Overflow具有相同的行为(至少在Ask Question页面上),禁用提交按钮,当我点击“Back”时,按钮仍然被禁用。也许我能做的最好的事情就是在禁用按钮的情况下离开它,从而强制他们手动刷新页面,或者(希望)鼓励他们尽可能使用网站导航而不是后退按钮。
如果其他人有更好的想法,我仍然愿意接受他们。
答案 1 :(得分:0)
为什么不为每个表单创建一个唯一的随机密钥,然后在提交时将密钥插入数据库,如果该密钥已经存在于数据库中,则表单已经提交,所以不要再次处理数据......这样你就不会修改DOM,并且可以确保数据的完整性。