我正在处理的网站包含通过AJAX动态加载的项目列表。向下滚动页面时,会加载更多项目。
现在,我的客户希望为每个项目添加类似Facebook的按钮(以及喜欢此功能的人数)。
集成默认类似按钮没问题,但如何将类似按钮添加到通过AJAX加载的项目?如果加载了一个新项目,Facebook API如何知道DOM树中有一个新的类似按钮需要获取有多少人喜欢这个的计数?
有没有人知道如何做到这一点?有可用的例子吗?除了整合标准按钮之外,我的搜索没有任何有用的东西。
答案 0 :(得分:44)
迟到的答案,但您可以在函数的回调中使用Facebook API的解析函数,该函数会加载新元素以呈现新的按钮:
FB.XFBML.parse();
您还可以将解析器指向要渲染的元素,因此它不会重新渲染已存在的类似按钮:
FB.XFBML.parse(document.getElementById('foo'));
这直接来自文档:https://developers.facebook.com/docs/reference/javascript/FB.XFBML.parse/
答案 1 :(得分:5)
迟到的答案,但万一有人需要它。
刚刚完成我的项目与描述的项目几乎相同。 我的页面通过json格式的ajax获取帖子,而不是创建dom元素,包括facebook,如按钮,推文按钮和谷歌加一个按钮。在我做对了之前,我遇到了很多问题。主要的问题是像按钮一样不能按预期工作......在我找到工作解决方案之后。
我正在使用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之类的按钮。我将post 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'));
}
希望有人会觉得这很有用,我知道我一周前会这样做:)
答案 2 :(得分:0)
Facebook赞按钮只是页面上的<iframe>
。没有“Facebook API”正在运行。类似计数是<iframe>
内部内容的一部分,并在浏览器加载src
URL时加载其余内容。类似按钮的代码如下:
<iframe src="http://www.facebook.com/plugins/like.php?href=YOUR_URL"
scrolling="no" frameborder="0"
style="border:none; width:450px; height:80px"></iframe>
因此,实际上,您需要做的就是在页面中的正确位置添加新的<iframe>
并使用正确的src
网址,其余所有内容都将自动为您处理
答案 3 :(得分:-4)
在ajax完成后调用此javascript函数;)
fb_sharepro_render()