2010-12-22 210 views
0

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

下面是代码(替换http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.phphttp://connect.facebook.net/en_US/all.js链接的代码工作,直到我提到的错误):

<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> 

感谢任何及所有帮助!

回答

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

3

您正在使用来自两个不同SDK的方法。 FB.apinew SDK(all.js)的一部分,FB.XFBML.Host.parseDomTree()old SDK(功能加载程序)的一部分。例如,要使用新SDK解析dom树,请致电FB.XFBML.parse()。我建议你选择两个SDK中的一个,最好是新SDK,如果你刚从旧SDK推出时开始使用。

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执行初始身份验证...如果用户没有authed,我赞同一个JS重定向到我们的登录URL(可从PHP SDK方法getLoginUrl) 。希望有所帮助。