我正在玩facebook的javascript sdk,无法将用户的电子邮件地址发送到服务器。这是代码:
<script type="text/javascript">
function fbLogin(){
FB.login(function(response) {
if (response.authResponse) {
console.log('Welcome! Fetching your information.... ');
$("<form id='fb_credentials' action='/create_user_with_fb' method='post'></form>").appendTo('body');
$("<input id='user_uid' type='hidden' />").appendTo("#fb_credentials");
$("<input id='user_access_token' type='hidden' />").appendTo("#fb_credentials");
$("<input id='user_email' type='hidden' />").appendTo("#fb_credentials");
$("input#user_uid").attr({
name: 'user[uid]',
value: response.authResponse['userID']
});
$("input#user_access_token").attr({
name: 'user[access_token]',
value: response.authResponse['accessToken']
});
FB.api('/me', function(response){
$("input#user_email").attr({
name: 'user[email]',
value: response.email
});
});
$('form#fb_credentials').submit();
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, {scope: 'email, publish_actions, offline_access'});
}
</script>
注意:在fbLogin
事件中调用onClick
函数。
我在这里要做的是使用JS SDK获取用户ID,access_token和电子邮件。 然后我使用JQuery创建表单并通过http post方法发送信息。
我可以获取除用户电子邮件地址之外的所有信息。我究竟做错了什么?我该如何解决这个问题?
答案 0 :(得分:2)
您需要将submit()调用移动到FB.api调用的回调函数定义内部,即将其向上移动一行,使其位于右大括号/ paranthesis之前。现在它的放置方式是在FB.api调用完成之前调用它,因此在返回电子邮件地址并将其分配给表单字段之前。请记住,FB.api是一个异步调用,它在完成之前不会阻止执行。