2012-03-12 52 views
0

如何在function中獲取令牌?我想把它從這個函數中發送出來以用於ajax處理。javascript從函數中獲取值

<body> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
    var token; 
    window.fbAsyncInit = function() { 
     FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true}); 
     FB.getLoginStatus(function(response) { 
      if (response.authResponse){ 
         if(response.status=="connected") { 
           token = response.authResponse.accessToken; 
         } 
      } 
     }); 
    }; 
    alert(token);//undefined 
</script> 
<div id="fb-root"></div> 
</body> 
+0

'token'定義外'fbAsyncInit'所以沒有必要得到'fbAsyncInit'什麼。當'token'被'fbAsyncInit'改變時,你是否希望能夠採取行動? – 2012-03-12 20:04:54

回答

4

你執行這可能不被執行的警報的時間內完成的異步請求:如果您需要運行要求令牌已經被設置的任何其他功能,從線給他們打電話。爲了解決您的問題,只需撥打一個功能,當異步方法完成:

var token; 
window.fbAsyncInit = function() { 
    FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true}); 
    FB.getLoginStatus(function(response) { 
     if (response.authResponse){ 
        if(response.status=="connected") { 
          token = response.authResponse.accessToken; 
          asyncComplete(); 
        } 
     } 
    }); 
}; 

function asyncComplete() { 
    alert(token); 
} 

或者,乾脆傳遞,而不是使用token變量的值:

window.fbAsyncInit = function() { 
    FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true}); 
    FB.getLoginStatus(function(response) { 
     if (response.authResponse){ 
        if(response.status=="connected") { 
          asyncComplete(response.authResponse.accessToken); 
        } 
     } 
    }); 
}; 

function asyncComplete(token) { 
    alert(token); 
} 
0

您沒有初始化令牌,當您試圖初始化它時,您在if塊中這樣做。所以你的一個if語句沒有通過if檢查。

+0

那麼如何初始化,以便我可以得到它? – 2012-03-12 20:06:04

+0

儘管'if'條件可能有問題,即使if是正確的,請求看起來是異步的,所以它仍然是'undefined',並且當前的alert()被放置。 – 2012-03-12 20:06:34

0

調用此AJAX調用完成時你的函數...

if(response.status=="connected") { 
    token = response.authResponse.accessToken; 
    YourFunction(token); 
} 
0

token變量被異步分配,所以只可獲得一次請求已發送給Facebook進行驗證和響應發送回。

token = response.authResponse.accessToken; 
doSomeOtherFunction(token); 
3

它是一個異步調用,這意味着你的函數被調用,並且在執行下一個alert語句使得令牌值'undefined'在那裏之前腳本不會等待它返回。

你可以做的就是叫你要調用的功能等,

var token; 
    window.fbAsyncInit = function() { 
     FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true}); 
     FB.getLoginStatus(function(response) { 
      if (response.authResponse){ 
         if(response.status=="connected") { 
           token = response.authResponse.accessToken; 
           alert(token);//should give correct value here 
           newFunction(token); 
         } 
      } 
     }); 
    };