我有一個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可能是由於您退出您的方法返回您的JSON數據。總是把我趕出去。 – noponies