javascript - 在函数外部获取 Facebook 访问 token

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

因此,我正在使用这样的函数来获取当前在我的网站上已通过身份验证的用户的访问 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

了解访问 token 的唯一方法似乎是在对 FB.getLoginStatus 的调用中调用的匿名函数中。

我确定问题在于 FB.getLoginStatus 内部的匿名函数直到页面上所有其他脚本结束后才执行。因此,变量“token”在一切执行完毕之前不会被设置,从而使其无用。

有没有办法将访问 token 提取到通用可访问的变量中?我不想在单个匿名函数中编写需要了解访问 token 的所有代码。

最佳答案

问题是 getLoginStatus 是连接到 FB api 的异步调用。但与此同时,您的脚本继续运行,因此警报( token );在 getLoginStatus() 完成之前被调用。所以 token 尚未设置。

我不知道您到底想用 token 做什么,但我的方法是在加载 token 后立即调用 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);
}

例如,您可以在屏幕上显示“正在加载...”指示器,然后仅在 getLoginStatus() 完成其任务之后删除并显示实际内容,因此之后 token 已设置。

希望这对您有帮助。

关于javascript - 在函数外部获取 Facebook 访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589543/

相关文章:

javascript - 在完成所有下拉框之前停止提交表单

javascript - 如何使用 Underscore 在 JavaScript 数组中获取重复项

ios - 如何在 ios 中获取 Facebook 用户信息

Facebook Oauth access_token andpoint 不返回 "expires"值

javascript - Facebook 点赞、图像关联

php - 错误 : Class 'Facebook\FacebookSession' not found with the facebook PHP SDK

javascript添加两个文本框值并在asp.net中显示在第三个

javascript - 组件渲染过早

php - Laravel 使用我自己的网站发布到 Facebook

java - https ://graph. facebook.com/v2.10/me/photos?access_token=xxxxxx 返回错误