下面的代码在名称和电子邮件上给我一个'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"})
答案 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();
});