2012-11-23 32 views
0

我有一個WordPress插件,用於投票所有主要社交網站並返回特定用戶的社交計數(追隨者)。使用WordPress瞬態緩存和AJAX json腳本的問題

這可能是非常緩慢和密集的服務器,所以我已經構建了插件使用WordPress瞬態緩存來存儲從社交網站返回的細節,並且還使用jQuery AJAX json來顯示數據。

這些是主要的功能:

檢索計數的Facebook

/** 
* Fetch Facebook count. 
* 
* @param string $url The url to fetch. 
* @return int of Facebook counts. 
*/ 
function ass_get_fb_likes($facebook_id) { 

    try { 
     $json = wp_remote_get("http://graph.facebook.com/".$facebook_id); 

     if(is_wp_error($json)) 
      return false; 

     $fbData = json_decode($json['body'], true); 
     return format(intval($fbData['likes'])); 

    } catch (Exception $e) { 
     return false; 
    } 
} 

此上述功能也被連接到處理該瞬態緩存另一功能。這方面效果很好。

來處理社交網絡數據

jQuery(function($) { 

    $('#fblikes').advanceddashboardwidget({ 
     'action':'get_facebook_likes', 
     'service':'facebook', 
     'countof':'likes', 
     'callback':'formatCount' 
    }); 
}); 

助手功能的初始顯示,如果一個給我的問題格式化顯示

function formatCount(element,count){ 
    var display_count=''; 
    count=parseInt(count,10); 
    if(count>1000000) 
    { 
     count=count/1000000; 
     count=count.toFixed(0); 
     display_count=count+'m'; 
    } 
    else if(count>1000) 
    { 
     count=count/1000; 
     count=count.toFixed(0); 
     display_count=count+'k'; 
    } 
    else 
    { 
     display_count=count; 
    } 
    element.html(display_count); 
} 

以下功能。它用於與WordPress通信以調用PHP函數並檢索數據。

(function($) { 
    $(document).ready(function() { 

     var AdvancedDashboardWidget = function(element, options) 
     { 
      var ele = $(element); 
      var settings = $.extend({ 
       action: '', 
       service: '', 
       countof: '', 
       query: '', 
       callback:'' 
      }, options || {}); 
      this.count=0; 
      var url=''; 
      switch(settings.service) 
      { 
       case 'facebook': 
        if(settings.countof=='likes' || settings.countof=='talks') 
        { 
         ajaxCall(action,ele,settings); 
        } 
        break; 
      } 
     }; 

    var ajaxCall = function(action,ele,settings){ 
     opts = { 
      url: ajaxurl, // ajaxurl is defined by WordPress and points to /wp-admin/admin-ajax.php 
      type: 'POST', 
      async: true, 
      cache: false, 
      dataType: 'json', 
      data:{ 
       action: settings.action // Tell WordPress how to handle this ajax request 
      }, 
      success:function(response) { 
       //alert(response); 
       ele.html(response); 
       return; 
      }, 
      error: function(xhr,textStatus,e) { // This can be expanded to provide more information 
       alert(e); 
       //alert('There was an error deleting the cache'); 
       return; 
      } 
     }; 
     $.ajax(opts); 
    }; 


     $.fn.advanceddashboardwidget = function(options) 
     { 
      return this.each(function() 
      { 
       var element = $(this); 

       // Return early if this element already has a plugin instance 
       if (element.data('advanceddashboardwidget')) return; 

       // pass options to plugin constructor 
       var advanceddashboardwidget = new AdvancedDashboardWidget(this, options); 

       // Store plugin object in this element's data 
       element.data('advanceddashboardwidget', advanceddashboardwidget); 
      }); 
     }; 

    }); 
})(jQuery); 

的問題

的問題是,當數據從瞬態函數返回始終有一個額外的0(零)附加到數。從我一直在閱讀這可能是因爲我使用「json」而不是「jsonp」。

當我將其更改爲「jsonp」時,出現錯誤「錯誤:未調用jQuery172011280598581866697_1353705456268」。我想這與回調函數有關。

到目前爲止,我發現這是在網站上顯示此信息的最快方式。如果數據存在於瞬態緩存中,則頁面加載速度很快,但如果不是這可能需要幾秒鐘,那就是我希望jQuery進來的位置,並且可能會顯示加載圖形,直到檢索到數據。

任何幫助將不勝感激。

+0

額外的0可能是由於您退出您的方法返回您的JSON數據。總是把我趕出去。 – noponies

回答