Asp.net-Mvc
$.ajax( { async : false } ) 請求仍在非同步觸發?
伙計們,我在這裡遇到了一個小問題。我正在嘗試實現以下場景:
- 使用者打開首頁並看到其他使用者的列表,然後點擊以將其添加到他的朋友列表中。
- 我向伺服器資源發出 Ajax 請求以驗證使用者是否登錄,如果是,我向另一個伺服器資源發出另一個 ajax 請求以實際將其添加到使用者的朋友列表中。
聽起來很簡單?這是我所做的:我創建了一個函式
isLoggedIn,它將向伺服器發出第一個請求,以確定使用者是否已登錄。我使用jQuery.ajax方法發出這個請求。這是我的功能:function isLoggedIn() { $.ajax({ async: "false", type: "GET", contentType: "application/json; charset=utf-8", dataType: "json", url: "/isloggedin", success: function(jsonData) { alert("jsonData =" + jsonData.LoggedIn); return jsonData.LoggedIn; } }); }返回的 JSON 非常簡單,如下所示:
{ LoggedIn: true } or { LoggedIn : false }現在這個方法,實際工作並正確顯示警報:
JsonData = true如果登錄,JsonData = false如果沒有登錄。到目前為止沒有問題,當我嘗試呼叫這個方法時出現問題:我這樣稱呼它:$(".friend_set .img").click(function() { debugger; if (isLoggedIn()) { alert("alredy logged in"); trackAsync(); popupNum = 6; } else { alert("not logged in"); //always displays this message. popupNum = 1; } //centering with css centerPopup(popupNum); //load popup loadPopup(popupNum); return false; });呼叫
isLoggedIn總是返回false,它返回false before the ajax request finishes (because the messagejsonData = trueis displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by statingasync: false`!不過,顯然它仍在非同步工作。我在這裡想念什麼?
你需要
async:false,不是async:"false"。(即傳遞 booleanfalse,而不是 string"false")。編輯:同樣對於非同步請求,您需要在呼叫後返回一個值
ajax,而不是在您的成功處理程序中:function isLoggedIn() { var isLoggedIn; $.ajax({ async: false, // ... success: function(jsonData) { isLoggedIn = jsonData.LoggedIn } }); return isLoggedIn }