Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t获取jquery表单验证以注册$.post元素_Jquery_Ajax_Forms_Validation_Submit - Fatal编程技术网

Can';t获取jquery表单验证以注册$.post元素

Can';t获取jquery表单验证以注册$.post元素,jquery,ajax,forms,validation,submit,Jquery,Ajax,Forms,Validation,Submit,我想验证一个表单,这样我可以检查基本信息(如输入的用户名、用户名的最小长度等),但也可以确保用户名和电子邮件之类的内容尚未被验证(这需要数据库搜索) 我已经准备好了所有的部分,在仔细研究之后,我缩小了它的范围,发现$.post语句虽然是要添加到我的“fail”计数器中,但没有这样做。如何从$.post行中获得某种形式的输出,以便真正验证(因为现在,即使用户名不可用,它也会提交表单) 这是我的(不过为了简单起见,缩短了显示用户名的部分)。请注意,“usernameoff”是我的错误块: funct

我想验证一个表单,这样我可以检查基本信息(如输入的用户名、用户名的最小长度等),但也可以确保用户名和电子邮件之类的内容尚未被验证(这需要数据库搜索)

我已经准备好了所有的部分,在仔细研究之后,我缩小了它的范围,发现
$.post
语句虽然是要添加到我的“fail”计数器中,但没有这样做。如何从
$.post
行中获得某种形式的输出,以便真正验证(因为现在,即使用户名不可用,它也会提交表单)

这是我的
(不过为了简单起见,缩短了显示用户名的部分)。请注意,“usernameoff”是我的错误块:

function validateForm()
{
   // set variables
   var username=document.forms["registrationnew"]["username"].value;
   var usernamespace=username.indexOf(" ");

   // set fail counter variable to determine if any requirements failed
   var counter=0;

   // check that username isn't blank, containing spaces, too short, or taken
   if (username==null || username=="")
   {
      counter++;
      $('#usernameoff').html("Must enter a username");
   }
   else if (username.indexOf(" ") >= 0)
   {
      counter++;
      $('#usernameoff').html("Cannot contain spaces");
   }
   else if (username.length < 3)
   {
      counter++;
      $('#usernameoff').html("Must be at least three characters");
   }
   else
   {
      $.post("check_username.php", {username: username}, function(result)
      {
         if(result == 0)
         {
            $('#usernameoff').html("Available");
         }
         else
         {
            counter++;
            $('#usernameoff').html("Not available");
         }
      });
   }  

   // if any test failed, return false
   if (counter > 0)
   {
      document.getElementById("errorflag").innerHTML=counter;
      return false;
   }
}
函数validateForm()
{
//设置变量
var username=document.forms[“registrationnew”][“username”].value;
var usernamespace=username.indexOf(“”);
//设置失败计数器变量以确定是否有任何要求失败
var计数器=0;
//检查用户名是否为空、包含空格、太短或已被占用
如果(用户名==null | |用户名==“”)
{
计数器++;
$('#usernameoff').html(“必须输入用户名”);
}
else if(username.indexOf(“”>=0)
{
计数器++;
$('#usernameoff').html(“不能包含空格”);
}
else if(username.length<3)
{
计数器++;
$('#usernameoff').html(“必须至少包含三个字符”);
}
其他的
{
$.post(“check_username.php”,{username:username},函数(结果)
{
如果(结果==0)
{
$('#usernameoff').html(“可用”);
}
其他的
{
计数器++;
$('#usernameoff').html(“不可用”);
}
});
}  
//如果任何测试失败,则返回false
如果(计数器>0)
{
document.getElementById(“errorflag”).innerHTML=计数器;
返回false;
}
}
$.post
执行查询以确定输入的用户名是否已被使用(并返回0或1)。我的问题是,无论返回哪个,它都不会增加“counter”,因此表单仍然提交

最终测试(
if(counter>0)
)将在AJAX调用返回之前运行。这是AJAX的“异步”部分

在您的情况下,最简单的解决方案是用同步调用替换
$.post

$.ajax({
  type: "POST",
  url: "check_username.php", 
  data: {'username': username},
  async: false,
  success: function(result) { /* ... */ }
});
这将导致脚本等待返回时出现延迟,但由于它位于您自己的服务器上,因此延迟应该相当小


(同步呼叫并不总是可能的。有关详细信息,请阅读文档。)

非常感谢您,昨天这个问题让我非常痛苦,我刚刚用这种方法成功地尝试了一下。我正在编写我的第一个网站(参加了一个学期的编码课程,并发现了错误),所以这是一个很大的学习经验。再次非常感谢。