我在 WordPress 中有一个 AJAX 函数,它调用 PHP 函数来返回数据库中临时记录的值。
当我使用 jQuery 调用该函数时,我收到结果,但它总是在值后面附加一个额外的 0(零)。
这是我的 jQuery 函数:
(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);
}
}
};
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');
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);
还涉及更多辅助函数,但这是与 WordPress 通信并返回 PHP 函数值的主要 jQuery 函数。
问题是,如果值返回为“
99
”,则它将返回为“990
”
这是 jQuery 调用的 PHP 函数:
/**
* Get Facebook Likes
*/
public function get_facebook_likes(){
echo 99;
}
如果我将上面的内容更改为
return 99;
,我会收到普通的 0
您的函数应使用 wp_send_json 将结果编码为 JSON 并将其发送回 AJAX 请求处理程序。这也将停止任何后续 PHP 的执行,因此无需使用 exit 或 die。
因此,对于您的具体示例,您将使用:
/**
* Get Facebook Likes
*/
public function get_facebook_likes(){
wp_send_json(99);
}
这是老问题,但我要回答这个问题。
wp_send_json()
功能可能会有所帮助,但并非总是如此。有时您可能无法使用此功能。就像,当你通过ajax加载帖子时,你会得到一些模板部分,你可以使用该功能。这就是为什么 WordPress 文档建议使用 die()
函数。
所以最后,你的 php 函数应该是这样的:
/**
* Get Facebook Likes
*/
public function get_facebook_likes() {
echo 99;
die();
}
使用Firebug查看实际发送和接收的网络数据。确定错误是来自 javascript 端还是 PHP 端。复制网络请求并将其粘贴到单独的浏览器窗口中以查看原始结果。如果是PHP,就追究一下。如果是 javascript 在做某事,请告诉我们。