验证包含 Ajax jquery 的表单函数

Posted

技术标签:

【中文标题】验证包含 Ajax jquery 的表单函数【英文标题】:Validate Form function containing Ajax jquery 【发布时间】:2019-04-13 21:07:22 【问题描述】:

我终于让我的 Ajax 函数正常工作,但现在我有了另一个程序。我的验证表单函数似乎在 Ajax 完成之前返回。如果打开我的控制台日志,console.log(result);就在我的返回结果之前;在我的 console.log(resp) 之前打印出来;在成功函数中找到。所以我的验证表单继续返回 false,因此我的表单没有提交。但我知道我的成功正在取得成功,因为我看到它在控制台日志中转储。为什么会这样?我需要用准备好的文档来包装我的函数吗?

下面是我的代码

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> </script>
<script>
function validateForm()
  var email = document.forms["signupform"]["email"].value;
  var result = false;
  if (email != "")
    $.ajax(           
      type: "POST",  
      url: "/CheckEmail2.php",  
      data:  "User_Email": email ,
      dataType: "json",
      success: function(resp)
        console.log(resp);
        if(resp.reply == "Not Found")
          result = true;
          return result;
        
        else
        
        result = false;
        return result;
        

      ,
      //error: function(data, status)
        //console.log(data, status);
        //alert("error");
      //
    ); //end Ajax
  
  console.log(result);
  return result;
;
</script>

【问题讨论】:

你能告诉我们你在哪里引用这个函数吗? 这是我的表单标签。
【参考方案1】:

基本问题是 ajax 是异步的,所以在 ajax 完成之前很久就会返回到函数。

可以在success里面使用form元素原生的submit,使用flag绕过ajax

var isValid = false
function validateForm()
  var form = document.forms["signupform"]
  var email = form["email"].value;

  if (email != "" && !isValid)
    $.ajax(           
      type: "POST",  
      url: "/CheckEmail2.php",  
      data:  "User_Email": email ,
      dataType: "json",
      success: function(resp)
        isValid = true
        // submit the form
        form.submit()
      
    ); //end Ajax
  

  return isValid ;
;

【讨论】:

以上是关于验证包含 Ajax jquery 的表单函数的主要内容,如果未能解决你的问题,请参考以下文章

jquery表单验证 自定义函数使用

Grails JQuery Ajax 表单验证

如何使用 jQuery validate 验证表单中的所有字段?

jQuery在使用ajax验证后提交表单

jQuery 表单验证和 Ajax 提交的问题

jquery验证表单不起作用[关闭]