Asp.net-Mvc

$.ajax( { async : false } ) 請求仍在非同步觸發?

  • October 7, 2009

伙計們,我在這裡遇到了一個小問題。我正在嘗試實現以下場景:

  1. 使用者打開首頁並看到其他使用者的列表,然後點擊以將其添加到他的朋友列表中。
  2. 我向伺服器資源發出 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 = true is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by statingasync: false`!

不過,顯然它仍在非同步工作。我在這裡想念什麼?

你需要async:false,不是async:"false"。(即傳遞 boolean false,而不是 string "false")。

編輯:同樣對於非同步請求,您需要在呼叫返回一個值ajax而不是在您的成功處理程序中:

function isLoggedIn() {
   var isLoggedIn;
   $.ajax({
       async: false,
       // ...
       success: function(jsonData) {
           isLoggedIn = jsonData.LoggedIn
       }
   });
   return isLoggedIn 
}

引用自:https://stackoverflow.com/questions/1531693