javascript - 使用 Javascript + Ajax 验证和提交表单

标签 javascript ajax asynchronous

这就是我想要做的。

  • 当在我的表单上单击“提交”表单时,javascript 函数将遍历表单的所有字段。

  • 对于每个字段,将调用一个函数,该函数将返回 true/false 以指示是否已正确填写。

  • 如果返回 false,它会在该字段旁边显示一条错误消息。

  • 如果所有字段都正确,它会提交表单。如果没有,则不提交。

这是棘手的部分。虽然大部分验证是通过 javascript 完成的,但用户名和电子邮件需要通过 ajax 验证,以查看用户名/电子邮件是否已被使用。

我目前为这个 ajax 函数使用的结构与此类似:

function validateSomething()
{
  var valid;
  $.post("something.php", {x:y},
  function(data)
  {
     if (isSomething(data))
       valid=true; 
       //Here referring to the valid variable 
       //set outside this function, in the
       // parent function
     else
       valid=false; 
  });
  return valid/
}

但这目前不起作用。

我该怎么做才能让它工作,即我可以阻止 validateSomething() 函数返回一个值,直到它被内部函数设置为 true/false 吗?

这样的东西会工作吗:

function validateSomething()
{
  var valid="unset";
  $.post("something.php", {x:y},
  function(data)
  {
     if (isSomething(data))
       valid=true; 
       //Here referring to the valid variable 
       //set outside this function, in the
       // parent function
     else
       valid=false; 
  });
  //Loop without returning until valid is set to true or false
  while (valid=='unset')
  {
     //Do nothing?
  }
  return valid/
}

最佳答案

您可以使用 async: false 强制 ajax 调用等待。

像这样使用 jquery:

function validateSomething() {
    var valid;
    $.ajax({
        url: "something.php",
        data: {x: y},
        type: "GET",
        async: false, // this makes the ajax-call blocking
        dataType: 'json',
        success: function (response) {
            valid= response.valid;
        }
     });
     return valid;
}

但是,使用 AJAX 的最大好处是它是异步的。此同步调用可能会在等待服务器时锁定浏览器。

关于javascript - 使用 Javascript + Ajax 验证和提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/577632/

相关文章:

javascript - 更改 2 个选择框后如何执行操作

javascript - 单击偶数元素时为偶数元素添加类,单击奇数元素时为奇数元素添加类

javascript - 将 Flickr API 响应打印到控制台 AngularJS

c# - HttpWebRequest.BeginGetResponse

c# - 在C#.NET4应用程序中在后台处理多个输入

javascript - 垂直 Accordion 菜单溢出问题

php - 如何使用 PHP、cURL、ajax 流式传输实时数据并将其呈现在折线图中

javascript - 如何在给定用户输入 X、Y 点的情况下绘制 HTML5 Canvas 线?

php - 查询 SQL 在 ajax jquery 中不起作用

c# - dot.Net 委托(delegate)有多少种方法?