fb.api在连接的用户上返回'undefined'

时间:2012-04-06 09:11:19

标签: javascript facebook facebook-javascript-sdk

下面的代码在名称和电子邮件上给我一个'undefined'。但是,用户登录是因为我有访问令牌和UID?

function getToken(){
    FB.login(function(response) {
        if (response.authResponse) {
            var access_token = response.authResponse.accessToken;
            var uid = response.authResponse.userID;
            document.getElementById('accessToken').value=access_token;
            document.getElementById('uid').value=uid;
            FB.api('/me', function(response) {
                console.log('Good to see you, ' + response.name + '.' +response.email);
            });
            document.forms['token'].submit();
        } else {
            return false;
        }
    }, {scope:'email,user_likes,friends_likes'});
}

当我输出fb.api对控制台的完整响应时,我得到了

[11:46:10.369] ({error:"load-error: unknown"})

2 个答案:

答案 0 :(得分:1)

我现在看到你要做的事情和问题。

为什么会失败:

您正在进行异步请求(使用 FB.api 方法),然后提交一个表单(这是一个猜测,因为您没有包含所有代码),它会重新加载整个页面,弄乱了使用异步请求。

至于如何解决问题:

在我看来,最好的解决方案是使用Server-Side authentication process,之后,当画布加载时使用客户端sdk。 这样你就可以在客户端和服务器端访问令牌。

另一种方法不是提交表单,而是使用访问令牌向服务器发出ajax请求(它可以在POST中),因为这两个请求都是异步的( FB.api 和服务器上的那个)一切都应该没问题。

答案 1 :(得分:0)

我认为快速解决方法是在FB.api函数中提交表单。 所以它看起来像:

FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.' +response.email);
            document.forms['token'].submit();
});