Как сделать JQuery-AJAX-запрос синхронным
Как сделать синхронный запрос AJAX?
У меня есть форма, которую нужно отправить. Но его нужно отправлять только тогда, когда пользователь вводит правильный пароль.
Вот код формы:
И код JQuery для отправки и проверки пароля это:
var ajaxSubmit = function(formE1) {
var password = $.trim($('#employee_password').val());
$.ajax({
type: "POST",
async: "false",
url: "checkpass.php",
data: "password="+password,
success: function(html) {
var arr=$.parseJSON(html);
if(arr == "Successful") {
return true;
} else {
return false;
}
}
});
}
Однако форма всегда отправляется независимо от значения, возвращаемого запросом ajax. Я проверил все остальное. Значение arr выходит "успешный» когда правильный пароль введен и работает правильно, наоборот.
Как сделать этот запрос синхронным? насколько я могу отладить, запрос является асинхронным, поэтому форма отправляется до того, как запрос будет завершен.
Код для checkpass.php
setbyid_employee(1);
$arr=$m->editdisplay_employee();
if($arr['employee_password'] == $employee_password)
{
$res="Successful";
}
else
{
$res="Password not match";
}
echo $res;
?>
Обновление: решение найдено.
Как указал Олаф Дитще: возвращаемое значениеajaxSubmit
не является возвращаемым значением.success: function(){...}
ajaxSubmit
не возвращает значения вообще, что эквивалентноundefined
, который в свою очередь оценивает.true
И это причина, почему форма всегда отправляется и не зависит от отправки запроса синхронно или нет.
Итак, я установил переменную на1
внутренняя успешность зависит от успешной. И проверил его значение из функции успеха, если это было1
за пределами функции успеха, то я написалreturn true ... else return false
, И это сработало.
Обновлен рабочий код:
var ajaxsubmit=function(forme1) {
var password = $.trim($('#employee_password').val());
var test="0";
$.ajax({
type: "POST",
url: "checkpass.php",
async: false,
data: "password="+password,
success: function(html) {
if(html == "Successful") {
test="1";
} else {
alert("Password incorrect. Please enter correct password.");
test="0";
}
}
});
if(test=="1") {
return true;
} else if(test=="0") {
return false;
}
}