FB.api不是一个功能

时间:2010-12-22 19:56:25

标签: javascript facebook api

我试图拉出用户墙上的所有帖子。我有一个连接到FB的运行示例,但是当我尝试使用FB.api获取用户名(我肯定已成功连接)时,我得到FB.api is not a function。有些搜索发现this表示我使用了错误的API链接,但是当我尝试new one(似乎使用相同的方法连接)时,所有firebug NET面板都表示它已成功加载,没有错误。 。 。什么都没发生。

以下是代码(将http://connect.facebook.net/en_US/all.js链接替换为http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php,以便代码在我提到的错误之前进行处理):

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript"></script>
<script type="text/javascript">
function grab(){
FB.api('/me', function(response) {
  alert(response.name);
  });
}
function update_user_box() {
var user_box = document.getElementById("user");
user_box.innerHTML =
"<div>"
+ "<fb:profile-pic uid='loggedinuser' facebook-logo='true'></fb:profile-pic>"
+ " Welcome, <fb:name uid='loggedinuser' useyou='false'></fb:name>"
+ "</div>"
+ "<a href=\"javascript:grab()\">try me</a>";
FB.XFBML.Host.parseDomTree();
}
</script>
</head>
<body>


<div id='user'><fb:login-button onlogin="update_user_box();"></fb:login-button></div>
<br><br>

<div id="fb-root"></div>
<script type="text/javascript">
FB.init("b07e858317c9069d450023b7500b4511", "xd_receiver.htm", {"ifUserConnected": update_user_box});

</script>
</body>
</html>

感谢任何和所有帮助!

3 个答案:

答案 0 :(得分:3)

您正在使用来自两个不同SDK的方法。 FB.apinew SDK(all.js)的一部分,FB.XFBML.Host.parseDomTree()old SDK(功能加载器)的一部分。例如,要使用新SDK解析dom树,请调用FB.XFBML.parse()。我建议您选择两个SDK中的一个,最好是新SDK,如果您刚刚开始使用,那么旧的SDK已被弃用。

答案 1 :(得分:1)

我猜你没有正确地进行初始化。我有类似的问题......我不清楚哪个是oAuth2.0和哪个FB-Connect。这看起来很混乱。我按照下面的例子,它对我有用。见here

<div id="fb-root"></div>
 <script src="http://connect.facebook.net/en_US/all.js"></script>
 <script>
   FB.init({
     appId  : 'YOUR APP ID',
     status : true, // check login status
     cookie : true, // enable cookies to allow the server to access the session
     xfbml  : true  // parse XFBML
   });
 </script>

希望这有帮助。


另外,您可能需要扩展权限才能访问publish_stream,read_stream。你应该参考here

答案 2 :(得分:0)

Typeoneerror是对的,你正在混合SDK。

以下是我正在初始化较新的JS SDK,使用event.subscribe来确保SDK已初始化并且用户已经在JS端进行了身份验证,然后再继续使用任何API调用或让我的游戏尝试加载等。

<div id="fb-root"> </div>
<script>
  window.fbAsyncInit = function() {
     FB.init({appId: 'YOUR_APP_ID', status: true, cookie: true, xfbml: true});
     FB.Canvas.setSize({ width: 760, height: 1000 }); // use this to increase canvas height
     FB.Event.subscribe('auth.login', function(response) {
     // You can call your function that requires FB.whatever here...
  });
};
(function() {
 var e = document.createElement('script'); e.async = true;
 e.src = document.location.protocol +
   '//connect.facebook.net/en_US/all.js';
 document.getElementById('fb-root').appendChild(e);
}());
</script>

我也在使用PHP SDK来执行初始身份验证...如果用户未进行身份验证,我会将JS重定向回显到我们的登录URL(可从PHP SDK方法getLoginUrl获得)。希望有所帮助。