如何在 ajax 调用中提交表单之前调用 javascript 验证函数

Posted

技术标签:

【中文标题】如何在 ajax 调用中提交表单之前调用 javascript 验证函数【英文标题】:How to call javascript validate function before form submit on an ajax call 【发布时间】:2016-05-17 03:51:35 【问题描述】:

这是我的 validate() 函数,返回 true 或 false。 我的问题是我只想在 validate() 返回 true 时调用 ajax 提交表单代码,否则它将显示带有无效数据错误消息的警报并留在页面中 不提交表单,不使用 ajax 我知道我可以使用if true return document.form2.submit();但在我的情况下它不起作用,请帮助!

Ajax 代码:

$("#form2").submit(function()

var formData = new FormData($(this)[0]);
$.ajax(
    url: "addv.php",
    type: 'POST',
    data: formData,
    success: function (data) 
        $('.fv').html(data).hide().fadeIn(500).delay(1000).fadeOut(500);
    ,
    contentType: false,
    processData: false
); 

return false;
);

javascript函数:

function validate()

    var m=document.getElementById("mat").value;
    var c=document.getElementById("kilo").value;
    var v=true;
    if(!isNaN(m))
        
          alert("matricule  doit etre une chaine !");
          document.getElementById("mat").value=null;
          v=false;
        
    if(isNaN(c))
        
          alert("kilométrage doit etre un entier !");
          document.getElementById("kilo").value=null;  
          v=false;
        
       return v;

表格:

  <form enctype="multipart/form-data" class="form2" id="form2">
         <label >Matricule</label></br>
         <input type="text" name="mat"></br>
         <label>kilométrage</label></br>
         <input type="text" name="kilo"></br>
         <label>Marque</label>  </br>
         <select name="mar" id="mar">
          <?php  
            while($res=mysqli_fetch_array($req1))
            
              echo "<option> $res[0] </option>";
            
          ?>    
         </select>
         <label>Propriétaire Cin</label>  </br>
         <select name="pro" id="prop" onchange=fn()>
          <?php  
            while($res=mysqli_fetch_array($req2))
            
              echo "<option> $res[0] </option>";
            
          ?> 
           </select>
         <label>Nom et Prénom</label>  </br>
         <input type="text" disabled id="propr"></br>
         <label>Photo</label>  </br></br>
         <input type="file" name="img" id="img"style="color:red;"></br></br>
         <input type="submit" value="Ajouter">
         <b><p class="fv" style="color:red" align="center"></p></b>
 </form>

【问题讨论】:

只是一个建议,随心所欲,但我注意到你在这里使用 jquery,我发现这个验证库 jqueryvalidation.org> 是一个很棒的工具。 【参考方案1】:

您可以使用preventDefault 来阻止提交表单。如果 validate 返回 true 则使用条件,然后使用 Ajax 其他情况显示警报

$("#form2").submit(function(e)
  e.preventDefault();
  if(validate())

    var formData = new FormData($(this)[0]);
    $.ajax(
      url: "addv.php",
      type: 'POST',
      data: formData,
      success: function (data) 
        $('.fv').html(data).hide().fadeIn(500).delay(1000).fadeOut(500);
      ,
      contentType: false,
      processData: false
    );     
   else 
   alert('error');
  
);

【讨论】:

效果很好!非常感谢 :) 只是有一个注释我无法理解,我删除了 alert('error') 代码现在是:else 并且没有调用 validate();出现消息错误,知道 else 块不包含任何内容! validate函数里面有两个alert。 validate 函数可以返回错误消息,或者消息数组而不是布尔值,如果它是空的,你可以创建 Ajax 请求,但如果不显示它们。 另外看看表单验证属性,它也为用户友好的表单验证提供了很好的解决方案。 developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/… 太棒了!非常感谢您,祝您有美好的一天:)【参考方案2】:

你可以这样做

$.ajax(
    url : 'my_action',
    dataType: 'script',
    beforeSend : function(xhr, opts)
        if(!validate()) //just an example
        
            xhr.abort();
        
    ,
    complete: function()
        console.log('DONE');
    
);

您可以检查您的数据是否有效,并根据它中止 ajax 请求。

【讨论】:

【参考方案3】:

为了回答您的问题,当我通过 ajax 提交表单时,我倾向于不使用提交按钮。

<input type="submit" value="Ajouter">

<input type="button" id="process_form" value="Ajouter">

然后你可以添加一些JS函数,如

$('#process_form').click ( function (e) 
  if(validate)
    // AJAX HERE
  else
    // return errors
  
);

这应该会让你朝着正确的方向前进。在您的情况下,表单不会提交,因为您没有提供方法或操作。但在使用 Ajax 时,这些不是必需的。

【讨论】:

【参考方案4】:

试试这个

$("#userFrm input,#userFrm  select").each(function(index, value)
                if(value.checkValidity()==false)
                alert("error message");
                return false
            
        );
// AJAX HERE

【讨论】:

以上是关于如何在 ajax 调用中提交表单之前调用 javascript 验证函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX 调用时如何存储到浏览器自动完成/自动填充

如何使用 Jquery AJAX 调用 MVC Action 然后在 MVC 中提交表单?

以 onsubmit 形式调用 ajax 函数 [重复]

如何防止表单提交在字段上点击输入? [复制]

如何在 ASP.NET MVC 中通过 Ajax 提交表单?

Laravel 4 CSRF 表单通过 Ajax 调用提交