如果上一次提交仍然有效,如何拒绝HTML表单提交

How to deny HTML form submission if previous submission is still in action?

本文关键字:拒绝 表单提交 HTML 何拒绝 提交 上一次 有效 如果      更新时间:2023-09-26

所以我有这个表单,它使用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请求中传递一个令牌,该令牌在请求开始处理后(显然是在繁重的工作开始之前)经过验证并失效,那么您就有了一种防止多次提交的方法。