Javascript 如果以前的提交仍然有效,如何拒绝HTML表单提交?
所以我有一个表单,它使用AJAX执行一个相当长的数据发布,现在我有点偏执,认为一些聪明的家伙可能会打开firebug并重新触发发布过程,而之前的表单仍然在运行。我如何避免这种情况 谢谢 您可以:Javascript 如果以前的提交仍然有效,如何拒绝HTML表单提交?,javascript,jquery,html,security,form-submit,Javascript,Jquery,Html,Security,Form Submit,所以我有一个表单,它使用AJAX执行一个相当长的数据发布,现在我有点偏执,认为一些聪明的家伙可能会打开firebug并重新触发发布过程,而之前的表单仍然在运行。我如何避免这种情况 谢谢 您可以: 禁用提交按钮 防止回车键按下 从表单标记中删除action属性 在第一次提交时重定向到另一个页面,并使带有表单的页面过期 话虽如此,你在前端只能做这么多事情来防止再次提交——总有办法的。如果您非常关心这一点,那么服务器端验证也是必要的(通常还是推荐的)。您可以: 禁用提交按钮 防止回车键按下 从表
- 禁用提交按钮
- 防止回车键按下
- 从表单标记中删除
属性action
- 在第一次提交时重定向到另一个页面,并使带有表单的页面过期
- 禁用提交按钮
- 防止回车键按下
- 从表单标记中删除
属性action
- 在第一次提交时重定向到另一个页面,并使带有表单的页面过期
话虽如此,你在前端只能做这么多事情来防止再次提交——总有办法的。如果您非常关心这一点,那么服务器端验证也是必要的(通常还是推荐的)。在提交表单时设置一个条件,并在表单提交时添加一个检查。jQuery中的示例:
$('form').submit(function(e) {
// If form has been submitted
if($(this).data('submitted') == true) {
e.preventDefault();
return;
}
// Set the condition
$(this).data('submitted',true);
//...
//After form has been submitted successfully, release the condition
$(this).data('submitted',false);
});
这比禁用表单的某些部分更可取,因为表单中的任何输入都可以进行提交。在提交表单时设置条件,并在表单提交时添加检查。jQuery中的示例:
$('form').submit(function(e) {
// If form has been submitted
if($(this).data('submitted') == true) {
e.preventDefault();
return;
}
// Set the condition
$(this).data('submitted',true);
//...
//After form has been submitted successfully, release the condition
$(this).data('submitted',false);
});
这比禁用表单的某些部分更可取,因为表单中的任何输入都可能导致提交。首先,考虑到您担心由于绕过客户端控制(即使用Firebug或Fiddler重新发出请求)而导致多次提交,您可以忽略在客户端应用控件的任何选项(即禁用按钮、JS提交状态检查等)。这是您必须在服务器上处理的问题
看一看这张照片。这通常用于帮助防止CSRF(就像链接中的上下文一样),但也用于避免多个表单提交。如果您可以在AJAX请求中传递一个令牌,该令牌经过验证,然后在请求开始处理后(显然是在繁重的工作开始之前)失效,您已经有了一种防止多次提交的方法。第一件事是,如果您担心由于绕过客户端控制(即使用Firebug或Fiddler重新发出请求)而导致多次提交,那么您可以忘记在客户端应用控制的任何选项(即禁用按钮、JS检查提交状态等)。这是您必须在服务器上处理的问题
查看。这通常用于帮助防止CSRF(正如链接中的上下文一样),但也用于避免多个表单提交。如果您可以在AJAX请求中传递一个令牌,该令牌经过验证,然后在请求开始处理后失效(显然是在繁重的工作开始之前),您已经有了一种防止多次提交的方法。…请注意,前三件事将涉及您在“提交”中要做的事情表单的处理函数。但我可以从Firebug中启用submit按钮,与Enter键相同,操作…+我无法重定向到另一个页面…前端只能做这么多事情-总是有办法的。如果您非常关心这一点,那么服务器端验证也是必要的(通常还是推荐的)请注意,前三件事将涉及你在“提交”中要做的事情表单的处理函数。但我可以从Firebug中启用submit按钮,与Enter键相同,操作…+我无法重定向到另一个页面…前端只能做这么多事情-总是有办法的。如果您非常关心这一点,那么服务器端验证也是必要的(通常还是推荐的)。您可能还想考虑如何加快服务器端操作,可能是通过将工作委派给另一个线程以异步方式完成,这样您就可以快速将某些内容返回到客户端。人们不喜欢无助地等待。您可能还想想想办法加快服务器端操作,可能是通过委派ting工作到另一个线程以异步方式完成,因此您可以快速将某些内容返回到客户端。人们不喜欢无助地等待。