Bar*_*rka 6 ajax jquery html5 facebook-like facebook-javascript-sdk
Facebook指示我们将以下代码放在我们的页面上:
<div id="fb-root"></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";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
Run Code Online (Sandbox Code Playgroud)
而不是我把它包装在一个函数中:
function ReloadSocialSharing() {
//facebook
(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=myappid";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
Run Code Online (Sandbox Code Playgroud)
并在里面调用它: $(function () { }
现在我喜欢的按钮和我的评论通过Facebook面板都显示并正常工作.然后我进行AJAX调用并将新的html元素添加到我的页面中.这些已经有适当的Facebook标记,类似于我原来的字段.我这样做我的ajax调用:
$('#search').ajaxSubmit(GetSearchAjaxFormOptions(!isDefault, element));
function GetSearchAjaxFormOptions(displayResetPreferencesButton, giveMeFocus) {
return {
target: '#search-results',
data: GetSearchData(),
success: function () { RunAfterSearchResultsAreReturned(giveMeFocus) },
error: function (error) {
alert("Oops. There was an error.")
}
};
}
RunAfterSearchResultsAreReturned() {
........
ReloadSocialSharing();
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但是,通过Ajax调用添加的新的社交共享元素没有连线并且不起作用.我错过了什么?
谢谢!
注意:我已经看到了关于使用FB.XFBML.parse()的注释; 但是,我试图避免使用XFBML.
您的尝试不起作用的(主要原因)原因是这一行:
if (d.getElementById(id)) return;
Run Code Online (Sandbox Code Playgroud)
即代码检查 facebook 脚本(您使用其余包含的代码动态添加的)是否已经存在,如果存在,则不会再次包含它。我相信重复数据删除是有原因的,无论如何,我测试了重新运行代码(通过确保添加脚本两次)但没有成功。
我看到了您关于 XFBML 的注释,但是FB.XFBML.parse()即使您实际使用的标记是 HTML5 的标记,调用(不带任何参数)似乎也能工作:
setTimeout(function() {
$('<div class="fb-like" data-send="false" data-layout="standard"
data-width="450" data-show-faces="false" data-colorscheme="light"
data-action="like"></div>').appendTo('#test');
FB.XFBML.parse();
}, 2000);
Run Code Online (Sandbox Code Playgroud)
jsFiddle的工作示例。