获取该功能的Facebook Access Token OUTSIDE

时间:2011-07-05 22:26:12

标签: javascript facebook facebook-graph-api facebook-access-token

所以我正在使用一个函数来获取当前在我网站上已经过身份验证的用户的访问令牌:

var token;
FB.getLoginStatus(
        function(response){
            if (response.session) { 
                alert(response.session.access_token);
                //This correctly shows the access token. <-----GOOD 
                token = response.session.access_token;
            } 
            else{
                //Other stuff.  
            }
        }
);
alert(token);
//This shows undefined.  <------PROBLEM

知道访问令牌的唯一方法是在FB.getLoginStatus调用中调用的匿名函数内。

我已经确定问题是FB.getLoginStatus中的匿名函数直到页面上所有其他脚本结束才会执行。因此,变量&#34;令牌&#34;在完成所有操作后才会设置,使其无效。

有没有办法将访问令牌提取到普遍可访问的变量中?我不想在单个匿名函数中编写需要访问令牌知识的所有代码。

2 个答案:

答案 0 :(得分:2)

问题是getLoginStatus是一个连接到FB api的异步调用。但同时你的脚本继续运行,所以警报(令牌);在getLoginStatus()完成之前调用。所以令牌尚未设置。

我不知道你想要用令牌做什么,但我这样做的方法是在加载令牌后立即调用getLoginStatus()内的函数,然后继续执行功能你要。所以......

var token;
FB.getLoginStatus(
        function(response){
            if (response.session) { 
                alert(response.session.access_token);
                //This correctly shows the access token. <-----GOOD 
                token = response.session.access_token;
                continueScript();
            } 
            else{
                //Other stuff.  
            }
        }
);


function continueScript() {
      ....
      doSomeMoreFunctionalitiesWithToken();
      ....
}

function doSomeMoreFunctionalitiesWithToken() {
      alert(token);
}

例如,您可以在屏幕上显示“loading ...”指示符,只删除它并显示实际内容之后getLoginStatus()完成其任务,因此之后已设置令牌。

希望这会对你有所帮助。

答案 1 :(得分:1)

尝试使用表达式FB._session.access_token从任何其他位置获取访问令牌。