Как сделать синхронный запрос ajax?
У меня есть форма, которую необходимо отправить. Но он должен быть представлен только тогда, когда пользователь вводит правильный пароль.
Вот код формы:
<form name="form" action="insert.php" method="post" onSubmit="return ajaxSubmit(this);" >
И код 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
<?php
require("includes/apptop.php");
require("classes/class_employee.php");
require("classes/class_employee_attendance.php");
$employee_password=$_POST['password'];
$m=new employee();
$m->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;
}
}