【问题标题】:Facebook Comments into ajax loaded jQuery-ui accordion, load OK only on first ajax callFacebook评论到ajax加载的jQuery-ui手风琴,仅在第一次ajax调用时加载OK
【发布时间】:2012-08-27 09:23:24
【问题描述】:
  1. 我有一个加载 jquery ui 手风琴的功能(基于不同 id 的不同手风琴)
  2. 当我点击标题为“Facebook 评论”的标签时,我会这样做:

    $("#myaccordion").bind('accordionchange', function(event, ui) {
        id = $("#myaccordion").data('id');
        switch (ui.newHeader.text()) {
            case "Facebook Comments":
                displayFb(id);
                break;
        }
    });
    
  3. “displayFB”函数是:

    function displayFb(id){
        $.get('/fbcomments/' + id, function(data) {
            $("#facecomm").append(data);
            });
        }
    

    www.myweb.com/fbcmets/id 在哪里:

    <div id="fb-root"></div>
    <script>(function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/es_ES/all.js#xfbml=1";
        fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));</script>
    <div class="fb-comments" data-href="<?php echo '/fbcomments/'.$id ?>" data-num-posts="10" data-width="220"></div>
    
  4. 当我加载主页,然后选择一个手风琴,然后打开 Facebook 评论时,它运行良好。如果我重新加载页面并选择另一个手风琴,再次完美工作。 问题是当我选择另一个手风琴或再次选择相同的手风琴而不重新加载整个页面时。手风琴加载得很好,上面的所有数据(图像、文本、视频等的一些标签),但 facebook cmets 没有出现。

  5. 我试过了:

    • 在主布局上加载 #fb-root 和 facebook 评论 &lt;script&gt;....不起作用。
    • FB.XFBML.parse(); 添加到 displayFB 函数中....不起作用
    • FB.XFBML.parse(); 添加到$(document).ready(function(){} ...不起作用。
  6. 感谢您的阅读并尽力提供帮助!

更新:

  1. 我做了这个小演示......我无法让它工作......也许 jsfiddle 不是插入 Facebook 评论的最佳位置:My First Fiddle

  2. 说我在我的网站上使用 cakephp 可能很重要...

  3. 请记住,我的代码在第一次手风琴调用和 displayFb 函数时运行良好……然后当我更改为其他手风琴时……它崩溃了……

  4. 再次感谢您!!

更新 2:

  1. This is another question 的用户....与我的非常相似。请注意,他没有使用手风琴...但是 jquery 是共同的...也许有人比我更能理解答案...

【问题讨论】:

  • 在 displayFb 函数中尝试 console.log(data) 并检查它是否从 api 返回数据?
  • 我试过了,它每次都返回数据......它工作正常但不显示 cmets,只有第一次。谢谢。
  • 您能否准备一个演示并提供任何链接,以便我了解问题所在。
  • 好的。非常感谢你的帮助。我会尽快准备一个演示来展示更多信息……

标签: jquery ajax accordion facebook-comments


【解决方案1】:

您可以使用浏览器调试器或提琴手来分析来自服务器的响应。它很可能包含一个您没有看到的错误,因为您的 Ajax 调用不处理错误。

尝试使用$.ajax() 而不是使用$.get() 并提供一个error() 回调函数来查看您的Ajax 调用可能会返回什么错误。像这样的东西。 (未测试)

您可能需要设置数据类型:

    jQuery.ajax({
      type: "GET",
      url: "/fbcomments/"+id,
      success: function (response) {
        // Append the data here into the dom
      },
      error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
      }
    });
  

【讨论】:

  • 我照你说的做了...更改方法和错误函数...它与我的解决方案具有相同的行为:仅在选择的第一个手风琴(其中任何一个)上加载 cmets.. .然后当我选择另一个手风琴时,消失并且没有更多的负载......
  • 一件奇怪的事情:当我尝试使用 console.log 来响应(数据)时,它显示了从 www.myweb.com/fbcmets/id 加载的所有内容 ....看起来还可以,但不要t 加载 fbcmets 的 iframe。我认为解决方案在 FB.XFBML.parse();但如何?我也试过了......再次结果不好......
  • 1) 调试 displayfb() 代码并检查当您将响应附加到#facecomm 时,Dom 是否已更改并且新元素是否存在,也许它们是隐藏的。 2)尝试移动 facecomm 元素,使其不在 iframe 中,以测试这是否是导致问题的原因。 3)。我同意其他cmets。缩减演示将帮助我们帮助您。一个非常好的方法是使用jsfiddle.net
  • displayfb()是运行在I帧还是宿主的上下文中?
  • 好的,我做了第 2 件事),我意识到以下几点:
【解决方案2】:

www.myweb.com/fbcmets/id 在哪里:

因此,您实际上是在添加 DIV 元素 #fb-root 并一遍又一遍地加载 JS SDK 并将其放入您的文档中……这不是一个好主意。

尝试通过 AJAX 加载 .fb-comments 元素,然后在该新内容上运行 FB.XFBML.parse

从一开始就将#fb-root 和JS SDK 嵌入到您的页面中,并且只有一次

【讨论】:

  • 我试过了。如果我在主布局中加载 facebook 评论
  • 也许我根本不理解主要概念,也许我会说的是疯狂......但我认为facebook
  • 你不应该在#fb-root 中插入任何东西,不要管那个元素。加载包括.fb-comments 元素在内的动态内容并将其放入文档中——然后告诉FB 脚本,它必须在文档的这个新部分上再次运行XFBML 解析器。
  • 天啊!!工作中!!好吧....不是 100% 完美但可以工作....最后,我将 FB.XFBML.parse() 添加到名为代码的 ajax 中....不在主布局或手风琴上....跨度>
  • 我无法解决如何不一遍又一遍地加载 #fb-root ......所以 facebook 加载器图标停留在 iframe 的顶部......我不知道为什么它的工作,但装载机仍然在那里......毕竟,真的很感谢你的帮助,CBroe 和你们所有人......请原谅我之前不要尝试这个解决方案......现在很明显对我来说……
猜你喜欢
  • 2014-04-03
  • 2015-02-13
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
相关资源
最近更新 更多