使用 jquery serialize 和 formvalidation.io 时如何防止表单重复发布?

Posted

技术标签:

【中文标题】使用 jquery serialize 和 formvalidation.io 时如何防止表单重复发布?【英文标题】:How do I prevent a form from double-posting when using jquery serialize and formvalidation.io? 【发布时间】:2018-09-13 09:07:17 【问题描述】:

我使用 formvalidation.io 库来验证脚本中的数据。它在进行正常的页面提交时工作得很好,但是当我选择使用 jquery 并序列化来提交它两次时。这可以在博客以及提交时发送的 2 封电子邮件中看到。如果我从 javascript 中注释掉 formvalidation,它会发布一次。我尝试重新组织和重新排列 javascript 无济于事。相关代码:

$(document).ready(function() 

  /* FORM-VALIDATION */
  $('#ContactForm').formValidation(
    framework: 'bootstrap',
    icon: 
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    ,
    fields: 
      'fname': 
        validators: 
          notEmpty: 
            message: 'The first name is required'
          ,
          stringLength: 
            min: 2,
            max: 40,
            message: 'First name must be at least 2 characters long'
          
        
      ,
      'lname': 
        validators: 
          notEmpty: 
            message: 'The last name is required'
          ,
          stringLength: 
            min: 2,
            max: 40,
            message: 'First name must be at least 2 characters long'
          
        
      ,
      'email': 
        validators: 
          notEmpty: 
            message: 'The email address is required'
          ,
          emailAddress: 
            message: 'The input is not a valid email address'
          
        
      ,
      'message': 
        validators: 
          notEmpty: 
            message: 'Message text is required'
          ,
          stringLength: 
            min: 10,
            max: 1000,
            message: 'Your message must be between 10 and 1000 characters in length.'
          
        
      
    
  )
  /* FORM-VALIDATION */

  /* SERIALIZE & SUBMIT FORM */
  $(function() 
    var form = $('#ContactForm');
    var formMessages = $('#form-messages');
    $(form).submit(function(e) 
      e.preventDefault();
      var formData = $(form).serialize();
      $("#Result").html( "" );
      $.ajax(
        type: 'POST',
        url: $(form).attr('action'),
        data: formData,
        success: function(html)  $("#Result").html( html ); 
      );
    );
  );
  /* SERIALIZE & SUBMIT FORM */

);

您可以在以下位置观看现场演示:http://www.dottedi.biz/demo/code/public/serialize+formvalidation/

【问题讨论】:

【参考方案1】:

我将 SERIALIZE 代码更改为以下内容,它现在可以工作了:

/* SERIALIZE & SUBMIT FORM */
.on('success.form.fv', function(e) 
  var form = $('#ContactForm');
  var formMessages = $('#form-messages');
  $(form).submit(function(e) 
    e.preventDefault();
    var formData = $(form).serialize();
    $("#Result").html( "" );
    $.ajax(
      type: 'POST',
      url: $(form).attr('action'),
      data: formData,
      success: function(html)  $("#Result").html( html ); 
    );
  );
);
/* SERIALIZE & SUBMIT FORM */

【讨论】:

以上是关于使用 jquery serialize 和 formvalidation.io 时如何防止表单重复发布?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 的 form.serialize 但排除空字段

使用 jquery serialize 和 formvalidation.io 时如何防止表单重复发布?

玩转web之json---将表单通过serialize()方法获取的值转成json

jQuery form.serialize() 没有给出当前值

JQuery中serialize()方法的使用

jQuery序列化表单数据 serialize()serializeArray()及使用