2012-03-15 84 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