2009-10-07 120 views
32

我在這裏遇到了一些問題。我試圖實施以下情形:

  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 message jsonData = true is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by stating async:false`!

雖然它顯然仍然是異步工作的。我在這裏錯過什麼人?

+2

不要緊'{異步:「 false「}'與'{async:false}'? – 2009-10-07 13:38:55

+0

@Cory Larson不,沒關係,事情是,該方法在ajax請求完成之前返回false。 – Galilyou 2009-10-07 13:42:50

回答

61

您需要async:false而不是async:"false"。 (即通過布爾值false,而不是字符串"false")。

編輯: 也與異步請求,你需要調用ajax後返回一個值你的成功處理程序中不

如果指定
function isLoggedIn() { 
    var isLoggedIn; 
    $.ajax({ 
     async: false, 
     // ... 
     success: function(jsonData) { 
      isLoggedIn = jsonData.LoggedIn 
     } 
    }); 
    return isLoggedIn 
} 
+3

@ 7alwagy:對不起,看我的編輯。 – 2009-10-07 13:51:38

+0

謝謝bendewey!看到某人編輯我的帖子總是很刺耳(我一直忘記這個功能),但是謝謝。 – 2009-10-07 13:56:26

+4

成功處理程序後的返回值做到了! – 2011-11-14 16:53:42