Javascript Can';不要在FB.api方法中声明任何内容
我正在玩facebook的javascript sdk,无法获取用户电子邮件地址以发送到服务器。代码如下:Javascript Can';不要在FB.api方法中声明任何内容,javascript,jquery,facebook,api,callback,Javascript,Jquery,Facebook,Api,Callback,我正在玩facebook的javascript sdk,无法获取用户电子邮件地址以发送到服务器。代码如下: <script type="text/javascript"> function fbLogin(){ FB.login(function(response) { if (response.authResponse) { console.log('Welcome! Fetching your inform
<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(){
FB.登录(功能(响应){
if(response.authResponse){
log('欢迎!获取您的信息…);
$(“”)。附加到('body');
$(“”)。附加到(“#FBU凭据”);
$(“”)。附加到(“#FBU凭据”);
$(“”)。附加到(“#FBU凭据”);
$(“输入#用户ID”).attr({
名称:“用户[uid]”,
值:response.authResponse['userID']
});
$(“输入#用户_访问_令牌”).attr({
名称:“用户[访问令牌]”,
值:response.authResponse['accessToken']
});
FB.api('/me',函数(响应){
$(“输入用户电子邮件”).attr({
名称:“用户[电子邮件]”,
值:response.email
});
});
$('form#fb#u credentials')。提交();
}否则{
log('用户取消登录或未完全授权');
}
},{范围:'电子邮件,发布操作,脱机访问'});
}
注意:在onClick
事件中调用fbLogin
函数
我在这里尝试的是使用JSSDK获取用户id、访问令牌和电子邮件。
然后,我使用JQuery创建一个表单,并通过HTTPPOST方法发送信息
我可以获得除用户电子邮件地址以外的所有信息。我做错了什么?如何修复此问题?您需要将submit()调用移动到FB.api调用的回调函数定义内部,即将其上移一行,使其位于右括号/右括号之前。现在它的放置方式是,在FB.api调用完成之前,也就是在电子邮件地址返回并分配给表单字段之前,它会被调用。请记住,FB.api是一个异步调用,它在完成之前不会阻止执行