2010-11-10 3 views
0

У меня есть функция проверки формы, которая проверяет, а также проверяет, было ли занято имя пользователя или нет (ajax).Почему эта функция возвращает "undefined"?

Это, как я называю код:

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

} 

Я также оповещать функцию для того, чтобы увидеть, что она возвращает:

alert(usernameValid()); 

Проблема заключается в том, что alertbox оповещения «неопределенные» в в некоторых случаях, поэтому моя проверка не перепрыгивает в следующее поле, оно зависает. Чтобы быть более конкретным, он предупреждает «Undefined» во всех случаях, кроме случаев, когда «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; 
    } 
} 

Кто-нибудь знает, что это не так, то почему код возвращает неопределенное значение в тех случаях, когда я тестирую «ответ» переменный?

КСТАТИ: Проверка сама по имени пользователя работает (отображается ошибка, когда она должна и т.д.), но она возвращает неопределенное значение ...

Благодаря

ответ

2

Это асинхронный вызов:

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

Так что return заявления в обратном вызове случаются долго после того, как usernameValid возвращает (и так как он ничего не возвращал , когда он был запущен, это undefined).

Где вы имеете return false; вы должны вызвать другую функцию, например: userNameInvalidFunction(), и что-то еще для true ... или просто продолжить представление и т.д.

Альтернативы, чтобы сделать ваш вызов AJAX синхронным ... но I настоятельно рекомендую, так как он полностью заблокирует браузер пользователя во время его выполнения.

+0

Упорядочить пример userNameInvalidFunction(), чтобы я полностью понял? и что вы подразумеваете под «чем-то другим для истины»? – 2010-11-10 11:05:13

+0

@ Camran - например. вместо того, чтобы полагаться на значение «return» вообще, вы просто запускаете другие функции, когда возвращается ответ сервера, думайте об этом как о замене 'return true;' с 'functionToCallWhenValid()' и 'return false;' с ' functionToCallWhenInvalid() '. –

+0

возможно ли вернуть true/false INSIDE эти функции, или вы имеете в виду, что мне нужно вызвать следующую функцию validation_function внутри функцииToCallWhenValid() или, возможно, отобразить сообщение об ошибке внутри функцииToCallWhenInvalid()? – 2010-11-10 11:13:50

Смежные вопросы