我如何使这个javascript验证工作?

我如何使这个javascript验证工作?,javascript,jquery,ajax,Javascript,Jquery,Ajax,在validateEmail()下,变量chump返回undefined,但它应该是真值或假值 我不明白,因为finalFlash()的两个条件语句下的alert()语句工作正常,所以我得到了一个真值或假值 <script> function validateRecipient() { var recipient=document.messageForm.recipient.value; if (recipient==null || recipient=="") { doc

validateEmail()
下,变量
chump
返回
undefined
,但它应该是真值或假值

我不明白,因为
finalFlash()
的两个条件语句下的
alert()
语句工作正常,所以我得到了一个真值或假值

<script>
function validateRecipient()
{
var recipient=document.messageForm.recipient.value;

if (recipient==null || recipient=="")
  {
  document.getElementById("recipientError").innerHTML='<div style="font-size:13px; color:#b94a48; clear:both">Please enter a username</div>';
  document.getElementById("recipient_error").className="control-group error";
  return false;
  }

else
  {
  document.getElementById("recipientError").innerHTML="";
  document.getElementById("recipient_error").className="control-group";
  return true;
  }  

}

function validateMessage()
{
var message=document.messageForm.message.value;
if (message==null || message=="")
  {
  document.getElementById("messageError").innerHTML='<div style="font-size:13px; color:#b94a48; clear:both">Please enter a message</div>';
  document.getElementById("message_error").className="control-group error";
  return false;
  }

else
  {
  document.getElementById("messageError").innerHTML="";
  document.getElementById("message_error").className="control-group";
  return true;
  }    

}


function validateMail()
{
var items = [validateRecipient(), validateMessage(), validateUser()];
var chump = validateUser()
alert(chump)

for (var i in items)
   {
   var item = items[i];
   item
   }

if (validateRecipient() && validateMessage() && validateUser())
   {
   return true;
   }

return false;
}


function validateUser(){
    $.get("/trivia/xhr_test/",
    {
      username: document.messageForm.recipient.value
    },
    function(data){
      return finalFlash(data); // edit suggested by Aamir Adnan
    });
}

function finalFlash(data){
    if (data == "True")
      {
      document.getElementById("recipientError").innerHTML="";
      document.getElementById("recipient_error").className="control-group";
      alert(true)
      return true
      }

    else if (data != null && data != "" && data == "False")
      {
      document.getElementById("recipientError").innerHTML='<div style="font-size:13px; color:#b94a48; clear:both">That username does not exist</div>';
      document.getElementById("recipient_error").className="control-group error";
      alert(false)
      return false
      }
}



</script>

函数validateRecipient()
{
var recipient=document.messageForm.recipient.value;
如果(收件人==null | |收件人==“”)
{
document.getElementById(“recipientError”).innerHTML='请输入用户名';
document.getElementById(“收件人错误”).className=“控制组错误”;
返回false;
}
其他的
{
document.getElementById(“recipientError”).innerHTML=“”;
document.getElementById(“收件人错误”).className=“控制组”;
返回true;
}  
}
函数validateMessage()
{
var message=document.messageForm.message.value;
如果(消息==null | |消息==“”)
{
document.getElementById(“messageError”).innerHTML='Please enter a message';
document.getElementById(“消息错误”).className=“控制组错误”;
返回false;
}
其他的
{
document.getElementById(“messageError”).innerHTML=“”;
document.getElementById(“消息错误”).className=“控制组”;
返回true;
}    
}
函数validatedemail()
{
var items=[validateRecipient()、validateMessage()、validateUser();
var chump=validateUser()
警惕(笨蛋)
对于(项目中的var i)
{
var项目=项目[i];
项目
}
if(validateRecipient()&&validateMessage()&&validateUser())
{
返回true;
}
返回false;
}
函数validateUser(){
$.get(“/trivia/xhr\u test/”,
{
用户名:document.messageForm.recipient.value
},
功能(数据){
返回finalFlash(数据);//编辑由Aamir Adnan建议
});
}
函数finalFlash(数据){
如果(数据==“真”)
{
document.getElementById(“recipientError”).innerHTML=“”;
document.getElementById(“收件人错误”).className=“控制组”;
警报(真)
返回真值
}
else if(数据!=null&&data!=“&&data=”False)
{
document.getElementById(“recipientError”).innerHTML='该用户名不存在';
document.getElementById(“收件人错误”).className=“控制组错误”;
警报(错误)
返回错误
}
}

validateUser函数启动异步get请求并立即返回。finalFlash在get完成时调用,但与validateUser的返回值无关


有关如何将其转换为同步请求的信息,请参阅。

希望此代码对您有所帮助

<script>
function validateRecipient()
{
var recipient=document.messageForm.recipient.value;

if (recipient==null || recipient=="")
  {
  document.getElementById("recipientError").innerHTML='<div style="font-size:13px; color:#b94a48; clear:both">Please enter a username</div>';
  document.getElementById("recipient_error").className="control-group error";
  return false;
  }

else
  {
  document.getElementById("recipientError").innerHTML="";
  document.getElementById("recipient_error").className="control-group";
  return true;
  }  

}

function validateMessage()
{
var message=document.messageForm.message.value;
if (message==null || message=="")
  {
  document.getElementById("messageError").innerHTML='<div style="font-size:13px; color:#b94a48; clear:both">Please enter a message</div>';
  document.getElementById("message_error").className="control-group error";
  return false;
  }

else
  {
  document.getElementById("messageError").innerHTML="";
  document.getElementById("message_error").className="control-group";
  return true;
  }    

}


function validateMail()
{
  validateUser();
}

function validateAll(chump){

var items = [validateRecipient(), validateMessage()];

for (var i in items)
   {
   var item = items[i];
   item
   }

if (validateRecipient() && validateMessage() && chump)
   {
   return true;
   }

return false;

}
function validateUser(){
    $.get("/trivia/xhr_test/",
    {
      username: document.messageForm.recipient.value
    },
    function(data){
      validateAll(finalFlash(data)); // edit suggested by Aamir Adnan
    });
}

function finalFlash(data){
    if (data == "True")
      {
      document.getElementById("recipientError").innerHTML="";
      document.getElementById("recipient_error").className="control-group";
      alert(true)
      return true
      }

    else if (data != null && data != "" && data == "False")
      {
      document.getElementById("recipientError").innerHTML='<div style="font-size:13px; color:#b94a48; clear:both">That username does not exist</div>';
      document.getElementById("recipient_error").className="control-group error";
      alert(false)
      return false
      }
}



</script>

函数validateRecipient()
{
var recipient=document.messageForm.recipient.value;
如果(收件人==null | |收件人==“”)
{
document.getElementById(“recipientError”).innerHTML='请输入用户名';
document.getElementById(“收件人错误”).className=“控制组错误”;
返回false;
}
其他的
{
document.getElementById(“recipientError”).innerHTML=“”;
document.getElementById(“收件人错误”).className=“控制组”;
返回true;
}  
}
函数validateMessage()
{
var message=document.messageForm.message.value;
如果(消息==null | |消息==“”)
{
document.getElementById(“messageError”).innerHTML='Please enter a message';
document.getElementById(“消息错误”).className=“控制组错误”;
返回false;
}
其他的
{
document.getElementById(“messageError”).innerHTML=“”;
document.getElementById(“消息错误”).className=“控制组”;
返回true;
}    
}
函数validatedemail()
{
验证euser();
}
函数validateAll(chump){
var items=[validateRecipient(),validateMessage()];
对于(项目中的var i)
{
var项目=项目[i];
项目
}
if(validateRecipient()&&validateMessage()&&chump)
{
返回true;
}
返回false;
}
函数validateUser(){
$.get(“/trivia/xhr\u test/”,
{
用户名:document.messageForm.recipient.value
},
功能(数据){
validateAll(finalFlash(数据));//编辑由Aamir Adnan建议
});
}
函数finalFlash(数据){
如果(数据==“真”)
{
document.getElementById(“recipientError”).innerHTML=“”;
document.getElementById(“收件人错误”).className=“控制组”;
警报(真)
返回真值
}
else if(数据!=null&&data!=“&&data=”False)
{
document.getElementById(“recipientError”).innerHTML='该用户名不存在';
document.getElementById(“收件人错误”).className=“控制组错误”;
警报(错误)
返回错误
}
}

在这里,这个脚本将帮助你做你想做的事情。您所犯的错误是,您对validateUser方法进行了ajax调用,并且调用了两次。每次激发ajax请求时,它都会异步执行,剩余的代码永远不会等待ajax调用完成。因此,我做了必要的更改,允许代码在ajax请求完成后执行。

缺少return
finalFlash(数据)
返回finalFlash(数据)
validateUser
function@AamirAdnan不仅如此。
return
将返回匿名函数,而不是
validateUser
@Pinkie你将不得不处理回调。然后可能会将
chump
定义为全局变量,然后使用它而不是返回值覆盖全局变量。@AamirAdnan我用
return finalFlash(data)
编辑了它,但它仍然给我未定义的。实际上,你什么时候调用validateEmail函数