2012-03-15 81 views
0

在這個腳本Facebook的FQL返回NaN值

function fql(){ 
      FB.api('/me', function(response) { 
       var query = FB.Data.query('select uid, name, email from user where uid={0}', response.id); 
       query.wait(function(rows) { 

        document.getElementById('name').innerHTML = 
        'Your name: ' + rows[0].name + "<br />" + 
        + rows[0].email + "<br />" + rows[0].uid; 
       }); 
      }); 
     }  

函數返回名稱和PIC,但電子郵件值爲NaN。應用程序需要基本的數據和電子郵件(它是在應用程序屬性/ Auth對話框中設置的),但我不能得到用戶的電子郵件。 當我在Facebook測試控制檯中測試這個查詢時,我得到了具有正確值的電子郵件字段。

回答

0

檢查在測試控制檯和您的站點上是否使用相同的應用程序ID,並確保用戶已授予您應用程序的email權限!

這可以用簡單的圖形API調用來完成:

FB.api('/me/permissions', function(response){ 
    if (response && response.data){ 
    var userPermissions = response.data.shift(); 
    if (userPermissions.email){ 
     alert('User is granted email permission'); 
    } else { 
     alert('User is NOT granted email permission'); 
    } 
    } else { 
    // No response or results from the Graph API 
    } 
}); 

夫婦的事情,你應該知道的!

  1. FB.Data.* is gone!它已被廢棄,無證件,不應再使用!從JavaScript SDK代碼中消失只是個時間問題...
  2. 你只是不想額外調用來計算當前用戶的ID(很可能你已經擁有了它,只需檢查FB.getUserID()) ,在FQL使用me()來指代當前用戶。

重寫你的FB.Data.*query.wait使用方式:

FB.api('/fql', {q:'YOUR_FQL_QUERY_HERE'}, function(response){ 
    var rows = response.data; 
}); 

在你的情況相同的結果可以通過圖形API調用接收不FQL的用法:

FB.api('/me', {fields: 'id,name,email'}, function(response){ 
    // response -> {id: UID, name: 'User Name', email: '[email protected]'} 
    console.log(response); 
}); 
+0

非常感謝你!它的工作! – 2012-03-15 12:21:16