Facebook FQL returns NaN value

Facebook FQL returns NaN value

本文关键字:value NaN returns FQL Facebook      更新时间:2023-09-26

在此脚本中

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;
                 });
            });
        }    

函数返回名称和图片,但电子邮件值为NaN。应用程序需要基本数据和电子邮件(它是在应用程序属性/Auth对话框中设置的),但我无法获取用户电子邮件。当我在Facebook测试控制台中测试这个查询时,我得到了具有正确值的电子邮件字段。

请检查在测试控制台和您的站点中是否使用相同的应用程序id,并确保用户已授予您的应用程序email权限!

这可以通过简单的Graph 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.*不见了它已被弃用,未记录,不应再使用!它从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;  
});

在您的情况下,Graph API调用可能会在不使用FQL:的情况下收到相同的结果

FB.api('/me', {fields: 'id,name,email'}, function(response){
  // response -> {id: UID, name: 'User Name', email: 'user@email.dz'}
  console.log(response);
});