2012-03-19 76 views
0

我試圖顯示一個facebook評論框以及生成的ajax內容。我將我的所有代碼都減少到了一個簡單的例子,在這個例子中我十分失望。AJAX調用後呈現Facebook評論框

我的主要示例頁面http://www.gerdalouw.com/ajax/ajax.html(從下拉菜單中選擇測試Ajax來執行)

下拉然後會自動繪製在http://www.gerdalouw.com/ajax/ax.html < <這部作品對自己很好,但FB評論框不想要通過Ajax調用生成。

我試過使用FB.XFBML.parse();函數,但是我要麼把它放在錯誤的地方,要麼我錯過了其他的東西?我想我錯過了一些非常明顯的地方?

我在這裏經歷了很多可能的解決方案來解決我的問題,但是找不到有效的方法。任何人都可以幫忙嗎?

+1

我沒有看到「FB.XFBML.parse();」在ajax.html或ax.html中。另外,我沒有看到FB.init。理想情況下,將AJAX內容渲染到頁面上後運行FB.XFBML.parse完全正常。我們已經在很多應用中使用過它。 – Shreeni 2012-03-19 23:59:31

+0

謝謝Shreeni,我真的不知道該把它放在哪裏(因爲它不想在我認爲應該放置的地方工作 - 在ax.html頁面內)。你或者某個人可能沒有一個簡單的例子來說明如何將這個Ajax調用(觸發頁面+被調用頁面)拼接在一起? – Herman 2012-03-20 07:23:15

回答

3

我發現這篇博客文章可能有幫助。 http://dominicminicoopers.blogspot.com/2012/03/assigning-url-for-facebook-comments.html

要做到這一點,它將會是稍微不同的代碼。注意,一旦FB對象完全初始化,callAjax就需要發生。我將它放在window.fbAsyncInit函數中,以確保FB已正確加載並初始化。

<div id="fb-root"></div> 

<div id="myCommentsDiv"></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/en_US/all.js#xfbml=1&appId=YOUR_APP_ID"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId : 'YOUR_APP_ID', // App ID 
     channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html' // Channel File 
    }); 

    callAjax(); 
    }; 

    function callAjax(yourData) { 
     $.ajax({ 
     url: "YOUR_AJAX_URL", 
     data: yourData, 
     success: function(){ 
      var mydiv = $('#myCommentsDiv'); 
      mydiv.html('<div class="fb-comments" href="' + document.location.href + '" posts="2" width="470">'); 
      FB.XFBML.parse(mydiv[0]); 
     } 
     }); 

    } 

    }; 
</script> 
+0

謝謝你,這個答案幫助我! – 2012-09-19 20:40:35

0

調用」 FB.XFBML.parse()」明確了成功的AJAX功能,這將重新解析HTML並呈現Facebook的評論部分

//facebook comments 
    var isFacebook = $data.find('.fb-comments'); 
    if(isFacebook != 'undefined') { 
     var scriptText = 'FB.XFBML.parse();'; 
     var scriptNode = document.createElement('script'); 
     scriptNode.appendChild(document.createTextNode(scriptText)); 
     contentNode.appendChild(scriptNode);     
    } 
5

這應爲你工作中:

$('body')。ajaxComplete(function(){FB.XFBML.parse(document.body)});

它會爲每個ajax調用調用FB.XFBML.parse。所以你不需要在任何地方重複呼叫。