Jak zsynchronizować żądanie JQuery-AJAX
Jak zrobić synchroniczne żądanie ajax?
Mam formularz, który należy przesłać. Ale musi być przesłane tylko wtedy, gdy użytkownik wprowadzi poprawne hasło.
Oto kod formularza:
<form name="form" action="insert.php" method="post" onSubmit="return ajaxSubmit(this);" >
Kod jquery do wysyłania i sprawdzania hasła jest następujący:
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;
}
}
});
}
Jednak formularz zawsze przesyła, niezależnie od wartości zwracanej przez żądanie ajax. Sprawdziłem wszystko inne. Wartość arr okazuje się być „udana” po wprowadzeniu poprawnego hasła i działa również odwrotnie.
Jak uczynić to żądanie synchronicznym? o ile mogę debugować, żądanie jest asynchroniczne, więc formularz zostanie przesłany przed ukończeniem żądania.
Kod dla 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;
?>
Aktualizacja: znaleziono rozwiązanie.
Jak wskazuje Olaf Dietshche: Zwracana wartośćajaxSubmit
nie jest wartością zwracaną przezsuccess: function(){...}
. ajaxSubmit
nie zwraca żadnej wartości, co jest równoważneundefined
, co z kolei oceniatrue
.
I to jest powód, dla którego formularz jest zawsze przesyłany i jest niezależny od wysyłania żądania synchronicznie lub nie.
Ustawiłem więc zmienną na1
funkcja sukcesu po pomyślnym zakończeniu. I sprawdziłem jego wartość poza funkcją powodzenia, jeśli tak1
poza funkcją sukcesu, wtedy napisałemreturn true ... else return false
. I to zadziałało.
Zaktualizowany kod roboczy:
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;
}
}