php - 为什么这个函数返回 "undefined"?

标签 php javascript jquery html validation

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

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

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

 }

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

  alert(usernameValid());

问题是警报框在某些情况下会发出“未定义”警报,因此我的验证不会跳转到下一个字段,它会挂起。 更具体地说,除了“length===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;
     }
}

有人知道出了什么问题,即为什么在我测试“响应”变量的情况下代码返回未定义?

顺便说一句:用户名验证本身有效(应该显示错误等),但它返回未定义...

谢谢

最佳答案

这是一个异步调用:

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

因此,回调中的 return 语句在 usernameValid 返回后很久才发生(并且由于它在运行时没有返回任何内容,这是未定义)。

如果return false;,您应该调用另一个函数,例如:userNameInvalidFunction(),以及其他true的函数。 .或者只是继续提交等等。

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

关于php - 为什么这个函数返回 "undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4143580/

相关文章:

PHP字符串 float

php - 在每个 php 页面的顶部包含 require ("db.php") 是否会减慢速度?

javascript - 通过显示文本获取下拉选项元素

PHP:如何不断读取文件

javascript - 从数据库中删除文件夹时如何删除文件夹中的多张照片?

javascript - 在javascript中过滤对象数组

javascript - 如何定义具有复合数据的数组字符串

javascript - 带 setTimeout 的双键陷阱 ctrl

jquery - 保持悬停事件

php - AJAX POST文件上传控件到PHP文件