【问题标题】:fbAsyncInit event listener not firing full functionfbAsyncInit 事件侦听器未触发完整功能
【发布时间】:2014-12-03 17:50:00
【问题描述】:

我遇到了一个问题,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 的操作。所以现在我不必弄乱插件代码,但我没有看到任何区别。

【问题讨论】:

  • 您是否查看了源代码以查看所有 php 变量是否正确?听起来好像有错误,否则没有响应。如果不是上述之一,包含源代码会更有用
  • 是的,我的变量是正确的。如果我从点击事件或其他东西中调用它,我就可以使用该功能并且它可以工作。所以我知道这不是问题。

标签: jquery facebook wordpress api facebook-graph-api


【解决方案1】:

由于您使用的是 WordPress,因此 jQuery 实现略有不同。尝试改变:

$(document).trigger('fbload');

到:

jQuery(document).trigger('fbload');

基本上,您需要将$ 替换为jQuery 才能让jQuery 正常工作。但是,只有在使用 jQuery 的 WordPress 版本时才需要这样做。

【讨论】:

  • 不幸的是,这没有任何区别:(
【解决方案2】:

事实证明,解决我的问题的最简单方法是必须在 $(window).load(function(){} 中编写代码。谢谢大家

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2020-09-06
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多