如果上一次提交仍然有效,如何拒绝HTML表单提交
How to deny HTML form submission if previous submission is still in action?
所以我有这个表单,它使用AJAX执行相当长的数据发布,现在我有点偏执,认为一些聪明的家伙可能会打开firebug并重新触发发布过程,而之前的表单仍在运行。我该如何避免这种情况?
谢谢!
您可以:
- 禁用提交按钮
- 禁止按Enter键
- 从表单标记中删除
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);
});
这比禁用表单的某些部分更可取,因为表单中的任何输入都可以进行提交。
第一件事是,如果你担心由于绕过客户端控制(即使用Firebug或Fiddler重新发出请求)而导致多次提交,你可以忘记在客户端应用控制的任何选项(即禁用按钮、JS检查提交状态等)。这是您必须在服务器上处理的问题。
请查看同步器令牌模式。这通常用于帮助防止CSRF(就像链接中的上下文一样),但也用于避免多个表单提交。如果您可以在AJAX请求中传递一个令牌,该令牌在请求开始处理后(显然是在繁重的工作开始之前)经过验证并失效,那么您就有了一种防止多次提交的方法。
相关文章:
- HTML表单提交时未执行外部函数
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 将图像上传ajax与表单提交ajax相结合
- Javascript无法处理表单提交
- 如何在我的情况下禁用表单提交
- 加载后的页面与ajax表单提交不起作用
- angularjs-控制器在表单提交时未调用
- 禁用带有字符白名单的表单提交
- 如何使用Google Analytics跟踪表单提交
- 使用javascript将表单提交到iframe目标中
- e.preventDefault在表单提交时被忽略
- AngularJS JQuery Ajax表单提交等效
- JavaScript表单提交帮助
- PHP表单提交和重定向
- 当所有输入文本字段都为空时,禁止表单提交,但当jquery中的任何字段不为空时允许提交
- setTimeOut AFTER jQuery表单提交
- 从函数中选择要触发表单提交的正确元素
- 表单提交 - IE 访问被拒绝 - 同一域
- 从表单提交批准/拒绝按钮中选择下拉菜单值
- 如果上一次提交仍然有效,如何拒绝HTML表单提交