2011-11-22 68 views
1

我在玩facebook的javascript sdk,無法獲取發送到服務器的用戶電子郵件地址。下面的代碼:無法在FB.api方法內聲明任何東西

<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方法發送信息。

我可以得到除用戶電子郵件地址以外的所有信息。我究竟做錯了什麼?我該如何解決這個問題?

回答

2

您需要將submit()調用移動到FB.api調用的回調函數定義中,即將其向上移動一行,以使其位於右大括號/ paranthesis之前。它現在放置的方式是在FB.api調用完成之前調用它,因此在電子郵件地址已被返回並分配給表單字段之前。請記住,FB.api是一個異步調用,它在完成之前不會阻止執行。