У меня есть функция проверки формы, которая проверяет, а также проверяет, берется ли имя пользователя или нет (ajax).
Вот как я называю код:
function validate(){ if(usernameValid()){ return true; } else { return false; } }
Я также предупреждаю эту функцию, чтобы увидеть, что она возвращает:
alert(usernameValid());
Проблема в том, что в некоторых случаях предупреждающее сообщение предупреждает «Undefined», поэтому моя проверка не переходит в следующее поле, оно зависает. Чтобы быть более конкретным, он предупреждает «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; } }
Кто-нибудь знает, что не так, то есть почему код возвращается неопределенным в тех случаях, когда я тестирую переменную «ответ»?
BTW: сама проверка подлинности для имени пользователя (ошибка отображается, когда она должна и т. Д.), Но возвращает неопределенные …
благодаря
Это асинхронный вызов:
$.post("username_check.php", {....
Таким образом, операторы return
в return
вызове происходят задолго после того, как usernameValid
возвращает (и поскольку он ничего не возвращал, когда он был запущен , он не undefined
).
Где вы return false;
вы должны вызвать другую функцию, например: userNameInvalidFunction()
и что-то еще для true
… или просто продолжить отправку и т. д.
Альтернатива – сделать синхронный вызов AJAX … но я настоятельно рекомендую против этого, так как он полностью заблокирует браузер пользователя во время его выполнения.