【问题标题】:Why is this function returning "undefined"? [duplicate]为什么这个函数返回“未定义”? [复制]
【发布时间】:2011-05-07 19:31:06
【问题描述】:

我有一个表单验证功能,它可以验证并检查用户名是否被使用(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;
     }
}

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

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

谢谢

【问题讨论】:

    标签: php javascript jquery html validation


    【解决方案1】:

    这是一个异步调用:

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

    所以回调中的return 语句在usernameValid 返回很久之后才发生(并且由于它在运行时没有返回任何内容,所以它是undefined)。

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

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

    【讨论】:

    • 愿意提供 userNameInvalidFunction() 的示例,以便我完全理解?您所说的“其他真实的东西”到底是什么意思?
    • @Camran - 例如而不是完全依赖return值,当服务器响应返回时,您只是启动其他功能,将其视为将return true;替换为functionToCallWhenValid()return false;替换为functionToCallWhenInvalid()
    • 是否可以在这些函数中返回 true / false,或者您的意思是我必须在 functionToCallWhenValid() 中调用下一个“validation_function”,或者可能在 functionToCallWhenInvalid() 中显示错误消息?跨度>
    • @Camran - 后者,你不能在这里return 任何东西......因为它稍后会在服务器返回时返回,所以你根本不能使用响应。异步通常的工作方式是在您当前的任何内容(在本例中为您的$.post())完成时调用下一个运行的东西......这就是您通过调用下一个函数或做任何需要做的工作来显示无论哪种情况,它都直接在回调中有效与否...从您的 $.post() 回调开始工作。
    猜你喜欢
    • 2021-01-14
    • 2020-12-25
    • 1970-01-01
    • 2018-03-08
    • 2016-09-24
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多