2014-01-19 48 views
2

我正在嘗試通過FB.login檢索電子郵件時遇到最困難的時間。以下是我的代碼如下:儘管使用範圍變量,Javascript Javascript API不會返回電子郵件

$(document).ready(function() { 
     $.ajaxSetup({ cache: true }); 
     $.getScript('//connect.facebook.net/en_US/all.js', function(){ 
      FB.init({ 
      appId: 'appId', 
        cookie: true, 
        oauth: true 
      });  

      $('#fbRegister').on('click', function(){ 
       FB.login(function(response){ 
        if(response.authResponse) 
        { 
         FB.api('/me?fields=email,name', function(responseFromFB){               

          var name = responseFromFB.name; 
          var email = responseFromFB.email; 

          //Take the vales and send to 
          $.ajax({ 

           type: "POST", 
           url: 'php/register.php',   
           async: false, 
           data: {'name':name,'email': email}, 
           success: function(data) 
           { 
            $('#fbRegister').hide(); 
            $('#successPrompt').show().text(data); 

           }, 
           complete: function() {}, 
           error: function(xhr, textStatus, errorThrown) 
           { 
            console.log('ajax loading error...'); 
            return false; 
           } 
         }); 

         },{scope:'email,name'}); 
        } 
        else 
        { 
         console.log('The login failed because they were already logged in'); 
        } 
       });     
      }); 
     }); 
     }); 

在應用中心權限中,我還爲電子郵件配置了用戶和朋友權限。似乎沒有任何工作。我錯過了什麼嗎?

+0

名稱字段是否正常工作? – Kukiwon

+0

是的,它的工作。 – Kreston

+0

嘗試從測試用戶的帳戶中刪除該應用(撤消權限)。然後再次登錄,看看會發生什麼。在陣列中添加一個權限後,權限不會自動更新,這可能是問題所在。 – Kukiwon

回答

7

您將作用域參數作爲參數傳遞給FB.api方法。它們需要提供給FB.login方法。試試這個:

$(document).ready(function() { 
    $.ajaxSetup({ cache: true }); 
    $.getScript('//connect.facebook.net/en_US/all.js', function(){ 
     FB.init({ 
     appId: 'appId', 
       cookie: true, 
       oauth: true 
     });  

     $('#fbRegister').on('click', function(){ 
      FB.login(function(response){ 
       if(response.authResponse) 
       { 
        FB.api('/me?fields=email,name', function(responseFromFB){               

         var name = responseFromFB.name; 
         var email = responseFromFB.email; 

         //Take the vales and send to 
         $.ajax({ 

          type: "POST", 
          url: 'php/register.php',   
          async: false, 
          data: {'name':name,'email': email}, 
          success: function(data) 
          { 
           $('#fbRegister').hide(); 
           $('#successPrompt').show().text(data); 

          }, 
          complete: function() {}, 
          error: function(xhr, textStatus, errorThrown) 
          { 
           console.log('ajax loading error...'); 
           return false; 
          } 
        }); 

        }); 
       } 
       else 
       { 
        console.log('The login failed because they were already logged in'); 
       } 
      }, {scope:'email,public_profile'});     
     }); 
    }); 
    }); 
+0

工作正常!謝謝,我真的很感激它。我不知道我是如何忽視這一點的。 – Kreston

+0

這也幫助了我。謝謝! –

0

上面的答案几乎是完美的。唯一的事情是行不通的餘地:「電子郵件,姓名」 應適用範圍:「電子郵件,public_profile」