Проблема с загрузкой jQuery () и Facebook XFBML - PullRequest
1 голос
/ 11 июля 2010

Ситуация

Я открываю слой (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 () не загружает js-часть.

(Если я открою userinfo.html в браузере, все будет работать)

Ответы [ 4 ]

4 голосов
/ 12 июля 2010

Я думаю, что это должно работать:

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

Обратите внимание, что он вызывается в обратном вызове загрузки, чтобы убедиться, что запрос Ajax завершен и данные были загружены до того, как был выполнен синтаксический анализ XFBML.

1 голос
/ 11 июля 2010

Теги FBML не отображаются, если их нет на странице с самого начала (т. Е. Вы загружаете теги fbml через ajax в некоторый div). Чтобы их отобразить, вам нужно проделать дополнительную работу.

Прежде всего, все js-файлы должны быть перемещены в главное окно (fb js include, fb init). userinfo.html должен содержать только fbml и html. Автоматический синтаксический анализ FBML должен быть отключен в FB.init({xfbml : false}) (я не помню, он мог бы работать с автоматическим анализом, но я думаю, что мне пришлось его отключить).

Вам нужно отметить место, где ваш будущий fbml будет загружен динамически, с помощью тега fb:serverFbml:

<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
1 голос
/ 11 июля 2010

Насколько я знаю, Facebook нужно это пространство имен:

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

Убедитесь, что вы указали это, или попробуйте присвоить ему идентификатор вместо более позднего div:

<html id="layer" xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
0 голосов
/ 12 июля 2010

Если я анализирую XFBML с некоторой задержкой, все работает нормально. Есть ли метод обратного вызова для диалога («открыть»), есть?

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