Первый A в AJAX означает «Асинхронный». Вызов выполнен, и выполнение функции продолжено без ожидания возврата вызова.
Вы можете установить опцию async
в своем вызове на false
, делая ваш вызов синхронным. Однако вам придется изменить свои функции, чтобы return false
перешел на функцию check
, и это не рекомендуется в руководстве jQuery:
Первая буква в Ajax обозначает «асинхронный», что означает, что операция происходит параллельно, и порядок выполнения не гарантируется. Параметр async для $ .ajax () по умолчанию имеет значение true, указывая, что выполнение кода может продолжаться после выполнения запроса. Настоятельно не рекомендуется устанавливать для этой опции значение false (и, следовательно, делать вызов более не асинхронным), поскольку это может привести к тому, что браузер перестанет отвечать на запросы.
лучшим способом было бы сделать проверки, которые вы можете выполнить в режиме реального времени внутри функции, затем запустить запрос Ajax и отправить форму в обратном вызове успеха этого запроса .
2-я попытка синхронного вызова. Кажется, это действительно работает - проверено в FF 3.6.
var name_success = true;
$.ajax({
type: "POST",
async: false,
url: "username.asp", // Needs to return "EXISTS" in this example
data: "username="+theform.username.value,
success: function(msg){
username = msg;
if (username == "EXISTS") { // Changed callback return value -
// safer this way
alert("username already in use");
name_success = false; // should work because
// we're in check()'s scope
return false;
}
}
});
alert (name_success);