为什么这个函数返回“undefined”?

时间:2010-11-10 10:41:41

标签: php javascript jquery html validation

我有一个表单验证函数,它验证并检查用户名是否被接受(ajax)。

这就是我调用代码的方式:

 function validate(){
   if(usernameValid()){
      return true;
   }
   else {
      return false;
   }

 }

我还提醒函数以查看它返回的内容:

  alert(usernameValid());

问题是警报箱在某些情况下警告“未定义”,因此我的验证不会跳转到下一个字段,它会挂起。 更具体地说,它在所有情况下都会发出“未定义”警告,除非“长度=== 0”,然后警告错误,这是正确的。

这是usernameValid函数:

    function usernameValid(fld) {
     if( $('#username').val().length !== 0 ) {
      $.post("username_check.php", {
        username: $('#username').val()
      }, function(response){
            response = escape(response);

            if(response==1){
             $('#username_error_invalid').show();
             $('#username_error_empty').hide();
             $('#username_error_taken').hide();
             return false;
            }
            else if(response==2){
                 $('#username_error_taken').show();
                  $('#username_error_invalid').hide();
                 $('#username_error_empty').hide();
                 return false;
            }
            else {
                 $('#username_error_taken').hide();
                  $('#username_error_invalid').hide();
                 $('#username_error_empty').hide();
                 return true;
            }
      });
     } 
     else{ 
         $('#username_error_empty').show();
         $('#username_error_invalid').hide();
         $('#username_error_taken').hide();
         return false;
     }
}

任何人都知道错误,即在我测试“response”变量的情况下,为什么代码返回undefined?

BTW:用户名的验证本身有效(如果出现错误则会显示等),但它会返回undefined ...

由于

1 个答案:

答案 0 :(得分:2)

这是一个异步调用:

$.post("username_check.php", {....

因此回调中的return语句在usernameValid返回后很久就发生了(因为它在运行时没有返回任何 ,它是undefined )。

你有[{1}}的位置,你应该调用另一个函数,例如:return false;,以及userNameInvalidFunction()的其他内容......或者只是继续提交等等。

另一种方法是让你的AJAX调用同步......但我强烈建议不要这样做,因为它会在执行时完全锁定用户的浏览器。

相关问题