Javascript if(function_foo())不等待function_foo()完成

doc*_*nge 1 javascript ajax jquery if-statement

我有一个if声明:

    if(authenticate_session("secret_password12345")){
        alert("You are authenticated");
    }else{
        alert("Intruder alert!");
    }
Run Code Online (Sandbox Code Playgroud)

和javascript身份验证函数,它使jQuery POST AJAX调用服务器进行实际身份验证,并返回true或false:

function authenticate_session(session_id){
 $.post("/auth.php",
    { action: "authenticate_session", login_id: session_id },
    function(data){
        if(data == "denied"){
            alert("denied");
            return false;
        }else if(data == "accepted"){
        alert("accepted");
            return true;
        }
    },
"text");
}
Run Code Online (Sandbox Code Playgroud)

但是,当if语句调用athentication函数时,它不会等待AJAX​​完成,并且总是执行'else'.如果我添加'return true;' 进入认证功能的第一行,在ajax之前,if语句按预期执行=> alert("你被认证").

我知道服务器端正在正常运行,因为正在按预期调用警报("拒绝")和警报("已接受")(但有趣的是,在if语句警报之后).

如何使我的if语句等到认证功能完成之后?

谢谢!

sli*_*kts 5

它没有等待,因为默认情况下它是一个异步请求.将async选项设置false为同步.来自文档:

默认情况下,所有请求都是异步发送的(默认情况下设置为true).如果需要同步请求,请将此选项设置为false.请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作.