Поздно поздно, но на всякий случай.
Только что закончил мой проект, почти такой же, как описанный.
Моя страница получает сообщения через AJAX в формате JSON, и я затем создаю элементы DOM, включая кнопку «Нравится» на Facebook, кнопку «Твиттер» и кнопку «Google плюс одна кнопка». У меня было много проблем, пока я не понял это правильно. Основная проблема заключалась в том, что кнопки не работали, как ожидалось, снова и снова ... Через некоторое время я нашел рабочее решение.
Я использую facebook js sdk (здесь вы можете найти полезную информацию )
<div id="fb-root"></div>
<script>
var isFBLoaded = false;
window.fbAsyncInit = function() {
FB.init({
appId: ' your api key',
status: true,
cookie: true,
xfbml: false
});
isFBLoaded = true;
...
renderFBqueue(); // i ll explain this later
};
(function() {
var e = document.createElement('script');
e.async = true;
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
Похоже, что существует проблема с содержимым ajax и FB.XFBML.parse () или чем-то подобным.
Я нашел решение на форуме разработчиков fb и изменил его в соответствии со своими потребностями. Поэтому после того, как я получаю контент json (несколько постов) из вызова ajax, я создаю все элементы с помощью jquery, кроме кнопок, похожих на fb. Я помещаю почтовый URL (и некоторые другие связанные данные) в очередь и вызываю функцию с таймаутом для создания / анализа этих кнопок.
var fb_queue = [];
...
function getMorePosts(){
$.get('moreposts.php', params, function(response){
if (response) createPosts(response);
}, 'json');
}
...
function createPosts(data){
...
for (var key in data.posts) {
...
fb_queue.push({ id : data.posts[key].id , url : data.posts[key].url });
}
... // elements are created
}
и, наконец, для создания и анализа fb-подобных кнопок
function parseFBqueue(){
if(isFBLoaded){
if (fb_queue.length==0) return false;
$.each(fb_queue, function (j, data) {
window.setTimeout(function () {
renderFBLike(fb_queue.shift());
}, (j + 1) * 300);
});
};
}
function renderFBLike(data){
var fblike = '<fb:like href="'+data.url+'" layout="button_count" ... ></fb:like>'
$('#fbdiv-'+data.id).append(fblike);
FB.XFBML.parse(document.getElementById('fbdiv-'+data.id'));
}
Надеюсь, кто-то найдет это полезным, я знаю, что я бы неделю назад:)