Подтвердить что ты не робот

Facebook Like Button обновляется после AJAX-Load

Мне нужно реализовать Facebook-Likebutton, где URL-адрес берется из запроса ajax... это означает, что я устанавливаю атрибут "href" после загрузки страницы. к сожалению, в это время url уже установлен, поэтому, когда он понравится, он примет фактический URL-адрес страницы... есть ли способ обновить кнопку like?

4b9b3361

Ответ 1

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

$(document).ajaxComplete(function(){
    try{
        FB.XFBML.parse(); 
    }catch(ex){}
});

Ответ 2

Если вы используете XFBML, я не знаю, как изменить URL. Однако, если вы используете iframe, этот фрагмент кода должен работать:

HTML

<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.google.com&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true" id="theiframe"></iframe>
<br />
<input id="url" />
<input id="btn" value="Change" type="button">

JQuery

$('#btn').click(function(){
    url = "";

    url += 'http://www.facebook.com/plugins/like.php?';
    url += 'href=' + $('#url').val() + '&amp;layout=standard&amp;';
    url += 'show_faces=true&amp;width=450&amp;action=like&amp;';
    url += 'font&amp;colorscheme=light&amp;height=80';

    $('#theiframe').attr({'src': url});
});

Ответ 3

Если вы используете XFBML, вы должны обернуть свой код кнопки, например.

<fb:like href="http://example.com" send="true" width="450" show_faces="true"></fb:like>

в div или span, например:

<span class="fb-like">    
  <fb:like href="http://example.com" send="true" width="450" show_faces="true"></fb:like>
</span>

Затем, получив новый URL-адрес через ajax, вы должны очистить уже сгенерированный facebook как виджет и заменить его новым fb: like code

jQuery('.fb-like').html('<fb:like href="http://example.com" send="true" width="450" show_faces="true"></fb:like>');

И чем вам нужно снова инициализировать кнопку facebook как

FB.XFBML.parse();

Окончательный код может выглядеть так. Предположим, что ответ содержит чистый новый URL

<span class="fb-like">    
  <fb:like send="true" width="450" show_faces="true"></fb:like>
</span>
<script type="text/javascript">
$.ajax({
  url: "getMeUrl.php",
  success: function(url){
    $('.fb-like').html('<fb:like href="'+url+'" send="true" width="450" show_faces="true"></fb:like>');
    FB.XFBML.parse();
  }
});
</script>

Резюме:

To refresh facebook like button (or any other facebook XFBML) you have to:
1) destroy existing initialized widget (clear the content of XFBML code wrapper)
2) add new XFBML code into wrapper
3) initialize new code via FB.XFBML.parse();

Ответ 4

Если вы используете fbml, вы можете создавать и анализировать элемент "на лету", см. этот ответ для деталей:

Как добавить Facebook "Like" на страницу, управляемую AJAX

Если вы используете iframes, вам не нужно снова создавать URL-адрес, просто обновите iframe. Например, чтобы обновить все фреймы на странице:

$("iframe").each(function(){
  $(this).attr('src', $(this).attr('src'));
});