我有一個if語句:的Javascript如果(function_foo())不會等待function_foo()來完成
if(authenticate_session("secret_password12345")){
alert("You are authenticated");
}else{
alert("Intruder alert!");
}
和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");
}
然而,當if語句調用athentication功能,它不會等待AJAX完成,始終執行「其他」。如果我添加'返回true'進入認證功能的第一行,在ajax之前,if語句按預期執行=> alert(「您被認證」)。
我知道服務器端運行正常,因爲警報(「拒絕」)和警報(「接受」)按預期被調用(但有趣的是,在if語句警報之後)。
如何讓我的if語句等到認證功能完成?
謝謝!
這個答案聽起來很不錯,但是將事情設置爲同步並沒有解決問題。奇怪吧? – doctororange 2009-10-12 12:54:11
這與我的答案一起,是票。 – doctororange 2009-10-12 13:00:14
你永遠不應該從瀏覽器進行同步呼叫。在瀏覽器中使用XHR時暴露同步功能是該組件設計中最大的一個錯誤。 – NickFitz 2009-10-12 16:59:58