不能在FB中声明任何东西.api方法

Can't declare anything inside FB.api method

本文关键字:api 方法 任何东 声明 FB 不能      更新时间:2023-09-26

我正在玩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方法发送信息。

我可以得到所有的信息,除了用户的电子邮件地址。我做错了什么?我怎样才能解决这个问题呢?

您需要将submit()调用移动到FB的回调函数定义中。API调用,即将其向上移动一行,使其位于右括号/大括号之前。现在它被放置的方式是,它在FB之前被调用。API调用已经完成,因此在返回电子邮件地址并将其分配给表单字段之前。记住FB。API是一个异步调用,它不会阻塞执行,直到它完成。