Почему вы думаете, что это не работает?Если вы ожидаете, что ваша функция проверит и возвратит значение перед отправкой формы, вполне вероятно, что функция availability
возвращается до того, как будет выполнена проверка ajax, что позволит вашей форме отправить и аннулировать предупреждение, т. Е.страница уже выгружена и новый запрос обрабатывается.Если вы хотите использовать это для проверки доступности перед отправкой формы, вам необходимо:
- Вернуть false из
availability
(или иначе прекратить отправку формы) - Выполнитеотправка формы из
availability
функции успеха. - (возможно). Укажите, что вы ожидаете текстовый ответ вместо HTML.
Вы также можете упростить проверку - естьнет необходимости помещать «данные» в переменную перед проверкой.Я также не уверен, почему вы добавляете его на страницу, но это может быть разумным.Я бы также предложил изменить имя функции (если вы изменили ее для этого) и обработать отправку формы через AJAX - если нет, вы можете удалить обработчик и просто инициировать отправку в форме.
submitIfAvailable: function(form, element, value) {
$.ajax({
type: "GET",
url: "/tunnel/availability.php",
data: "username="+element,
dataType: 'text', // I think it should work without this, but...
success: function(data){
if (data == "yes"){
$form = $(form);
$.post( $form.attr('action'), $form.serialize(), function(result) {
// process the result of form submission
});
}
}
});
return false;
}
Я делаю некоторые предположения - при необходимости измените, если это не соответствует использованию функции availability
.Главное, что нужно помнить, это то, что функция вернет до того, как вызов AJAX завершится, и вы не можете использовать любое возвращаемое значение из функции, полученной из вызова AJAX.Это верно, по крайней мере, если вы не заставляете вызов AJAX работать синхронно, установив для параметра aSync
значение false
.