迟到的答案,但以防万一有人需要。
刚刚完成的项目与描述的项目几乎相同。
我的页面通过 ajax 以 json 格式获取帖子,然后我创建了 dom 元素,包括 facebook like button、tweet button 和 google plus one button。在我做对之前,我遇到了很多问题。主要问题是,like 按钮一次又一次无法按预期工作......之后我找到了可行的解决方案。
我正在使用facebook js sdk(你可以找到一些有用的信息here)
<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 developers forum 上找到了一个解决方案,并对其进行了修改以满足我的需要。因此,在我从 ajax 调用中获取 json 内容(多个帖子)后,我使用 jquery 创建了所有元素,除了 fb 之类的按钮。我将帖子网址(和其他一些相关数据)放入队列中,并使用超时调用函数来创建/解析这些按钮。
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'));
}
希望有人会觉得这很有用,我知道一周前我会的 :)