2014-10-08 103 views
0

我遇到了一個問題,fbAsyncInit沒有運行它應該的整個功能。以下是我在asyncinit調用中添加了事件監聽器的地方。如果我只是嘗試在document.ready上運行該函數,那麼我會收到錯誤,並說FB未定義。不幸的是,我不得不將事件監聽器添加到我正在使用的插件(WP-FB-AutoConnect)的代碼中。我知道這是不好的做法,但它似乎是操縱init調用的唯一方式。意思是不過我不確定這是否是問題,因爲如果我添加了類似警報的東西,它就會啓動。以下是我在init調用中添加了事件監聽器的地方。fbAsyncInit事件監聽器沒有觸發全功能

<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

你查看源代碼,看看是否所有的PHP變量正確嗎?聽起來好像有錯誤,或者沒有響應產生。如果不是上述之一,包含來自源代碼的代碼會更有用 – David 2014-10-09 00:21:42

+0

是的,我的變量是正確的。我可以使用函數if我稱之爲點擊事件或其他東西,它的工作原理。所以我知道這不是問題。 – 2014-10-09 16:08:59

回答

0

原來解決我的問題,最簡單的方法是有內$碼(窗口).load(函數(){}。謝謝你們

0

由於您使用的是WordPress,所以jQuery的實現稍有不同。嘗試改變:

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

到:

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

基本上,你需要爲了與jQuery更換$ jQuery的正常工作。但是,只有在使用jQuery的WordPress版本時才需要。

+0

不幸的是,這並沒有什麼區別:( – 2014-10-09 17:14:45