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;
    }
}

questionAnswers(6)

yourAnswerToTheQuestion