无法在FB.api方法中声明任何内容

时间:2011-11-22 06:09:25

标签: 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 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方法发送信息。

我可以获取除用户电子邮件地址之外的所有信息。我究竟做错了什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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