Ваша функция должна всегда возвращаться до завершения вашего ajax-запроса на страницу PHP, потому что ajax-запрос асинхронный .Вы запускаете в своей функции, но она завершается после выполнения сетевых операций..post
не блокирует ожидание результата.
Вы можете заблокировать его, используя .ajax
вместо .post
с опцией async: false
, но во многих браузерах, которые блокируют пользовательский интерфейс внеприятный способ во время сетевого запроса.
Вместо этого попросите вашу функцию принять обратный вызов, который она вызовет с результатом операции:
function checkAvailability(callback) {
var grpname = $('#groupname').val();
//use ajax to run the check
$.post("checkGroupName.php", { gname: grpname },
function(result){
if(Number(result) == 0){
//show that the groupname is available
$('#username_availability_result').html(grpname + ' is Available');
callback(true);
}
else{
//show that the groupname is NOT available
$('#username_availability_result').html(grpname + ' is already taken');
callback(false);
}
});
}
Код, который использовался для этого:
doSomething();
if (checkAvailability()) {
itsAvailableLetsDoSomething();
moreAvailableStuff();
}
else {
itsNotAvailableDoSomethingElse();
otherStuff();
}
... вместо этого выглядело бы так:
doSomething();
checkAvailability(function(available) {
if (available) {
itsAvailableLetsDoSomething();
moreAvailableStuff();
}
else {
itsNotAvailableDoSomethingElse();
otherStuff();
}
});
Как видите, воздействие минимально, но, делая это, вы используете асинхронную связь, чтобы сохранитьВаш пользовательский интерфейс отзывчив.