2012-12-19 50 views
-2

可能重複:
How to return AJAX response Text?
Variable doesn’t get returned JQuery
AJAX not updating variableJavascript方法沒有返回值

我有這個代碼的問題:

/** 
* facebook Object*/ 
var fbObject = new Object(); 


/** 
* Function to get login status 
* @returns boolean Logged in status 
* */ 
fbObject.getLoginStatus = function() { 
    FB.getLoginStatus(function(response) { 
     if (response.status == 'connected') { 
       console.log('logged in'); 
       return true; 
      } else { 
       console.log('not logged in'); 
       return false; 
      } 
    }); 
} 

var status = fbObject.getLoginStatus(); 

    alert('Status: '+ status); 

我的問題是getLoginStatus方法沒有返回值。

+1

它***異步***!而且你不會從函數中返回任何東西,那麼你會期望什麼? – Bergi

+0

你爲'response.status'獲得的價值是什麼? –

+0

原因很簡單:當getLoginStatus結束時,遠程服務器沒有收到問題也沒有回答。所以你**不能**得到返回的東西。 –

回答

0

你需要一個回調

Ajax請求不返回任何東西,他們是異步


嘗試這種情況:

var status = function(s){ 
    alert('Status: '+ s); 
}; 

/** 
* Function to get login status 
* @returns boolean Logged in status 
* */ 
fbObject.getLoginStatus = function() { 
    FB.getLoginStatus(function(response) { 
     if (response.status == 'connected') { 
      console.log('logged in'); 
      status(true); 
     } else { 
      console.log('not logged in'); 
      status(false); 
     } 
    }); 
} 
+0

試過這個,但這也不工作:( –

0

的方法是異步的,要在一個同步的方式使用它。在回調函數中返回一個值是不可能的。

0

功能是異步的,

我會做什麼是運行在實際的回調「回調代碼」:

fbObject.getLoginStatus = function() { 
    FB.getLoginStatus(function(response) { 
     if (response.status == 'connected') { 
       console.log('logged in'); 
       alert('Status: '+ true); 
      } else { 
       console.log('not logged in'); 
       alert('Status: '+ false); 
      } 
    }); 
} 

或傳遞一個回調函數,或擺攤,直到函數已經返回。