我遇到了fbAsyncInit没有运行它应该运行的整个函数的问题。下面是我在asyncinit调用中添加事件监听器的地方。如果我只是尝试在document.ready上运行该函数,我收到并且错误地说FB未定义。不幸的是,我不得不将事件监听器添加到我正在使用的插件的代码中(WP-FB-AutoConnect)。我知道这是不好的做法,但它似乎是操纵init调用的唯一方式。这意味着我不确定这是什么问题,因为如果我添加类似警报的内容,它就会触发。下面是我在init调用中添加事件监听器的地方。
<script type="text/javascript">//<!--
window.fbAsyncInit = function()
{
FB.init({
appId: '<?php echo get_option($opt_jfb_app_id); ?>',
status: true,
cookie: true,
xfbml: true,
oauth: true,
channelUrl: '<?php echo $channelURL; ?>'
});
$(document).trigger('fbload');
<?php do_action('wpfb_add_to_asyncinit'); ?>
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/<?php echo apply_filters('wpfb_output_facebook_locale', 'en_US'); ?>/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
//--></script>
这是我正在写的页面上的js / jquery。
function facebook_ratings() {
console.log('from fbload');
var fb_page_id = $('#fb-page-id').val();
var fb_page_token = $('#fb-page-access_token').val();
FB.api(
"/"+fb_page_id+"/ratings",
{
access_token: fb_page_token,
},
function (response) {
if (response && !response.error) {
/* handle the result */
console.log('response', response);
var average = 0;
for (var i=0; i < response.data.length; i++) {
average += response.data[i].rating;
console.log('reviewer name', response.data[i].reviewer.name);
console.log('reviewer id', response.data[i].reviewer.id);
console.log('message', response.data[i].review_text);
console.log('\n');
}
average = average/response.data.length;
console.log('average', average.toFixed(2));
}
else {
console.log(response.error);
}
});
};
$(document).on('fbload', facebook_ratings());
当我加载页面时,唯一返回的是第一个控制台日志或FB.api()之前的任何内容。另外,我确信facebook_ratings()函数有效,因为我可以在其他上下文中使用它。先感谢您!
编辑:我发现了一个在init调用中添加jquery的操作。所以现在我不必乱用插件代码,但是我没有看到任何区别。
答案 0 :(得分:0)
由于您使用的是WordPress,因此jQuery实现略有不同。尝试更改:
$(document).trigger('fbload');
为:
jQuery(document).trigger('fbload');
基本上,您需要将$
替换为jQuery
才能使jQuery正常工作。但是,只有在使用WordPress版本的jQuery时才需要这样做。
答案 1 :(得分:0)
事实证明,修复我的问题的最简单方法是必须在$(window).load(function(){}中编码。谢谢你们