jQuery load()和Facebook XFBML的问题

时间:2010-07-11 18:18:59

标签: php jquery facebook jquery-ui xfbml

情况

我打开一个这样的层(jQueryUI)。

$("#dialog").load('userinfo.html #layer').dialog('open');

userinfo.html 显示照片和Facebook用户的名称。

  <html xmlns:fb="http://www.facebook.com/2008/fbml">
    <...some code...>
    <div id="layer">
      <script type="text/javascript">
        $(function() {   
        FB.init("2342342423424", "http://www.mysite.com/xd_receiver.htm");  
        });
      </script>  
      <fb:profile-pic uid="200000999530485" size="square" linked="true"></fb:profile-pic> <fb:name uid="200000999530485"></fb:name>
     </div>
   <...some code...>
</html>

问题:

图层打开但 fbml标记未呈现! 请帮忙。我认为load()doenst加载js-part。

(如果我在浏览器中打开userinfo.html,一切正常)

4 个答案:

答案 0 :(得分:4)

我认为这应该有效:

$("#dialog").load('userinfo.html #layer', function() {
  FB.XFBML.parse(document.getElementById('dialog'));
});
$("#dialog").dialog('open');

请注意,它是在加载回调中调用的,以确保Ajax请求已完成,并且在触发XFBML解析之前已加载数据。

答案 1 :(得分:1)

据我所知,facebook需要这个命名空间:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">

确保您指定或尝试为其提供ID而不是后面的div:

<html id="layer" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">

答案 2 :(得分:1)

如果FBML标记从一开始就不存在于页面上,则不会呈现它们(即通过ajax将fbml标记加载到某个div中)。为了呈现它们,你需要做一些额外的工作。

首先,应将所有js内容移动到主窗口(fb js include,fb init)。 userinfo.html应该只包含fbml和html。应该在FB.init({xfbml : false})中禁用自动FBML解析(我不记得,它可能适用于自动解析,但我认为我必须将其关闭)。

您需要使用fb:serverFbml标记标记将动态加载未来f​​bml的位置:

<div id="dialog">
    <fb:serverFbml id="dialog-fbml"></fb:serverFbml>
</div>

您的fbml加载脚本现在看起来像:

$("#dialog-fbml").load('userinfo.html #layer'); //load fbml
FB.XFBML.parse($("#dialog")[0]); //parse it
$("#dialog").dialog('open'); //show

答案 3 :(得分:0)

如果我稍微解析XFBML,一切正常。没有对话框的回调方法('打开'),有吗?

      $("#dialog").load('userinfo.html #layer');
      $("#dialog").dialog('open');        
      setTimeout(function() {FB.XFBML.parse(document.getElementById('#dialog'));} ,4000);