我创建了一个小小的AJAX插件来计算文章的点击率并绕过缓存,但它不起作用,也没有抛出任何错误。
你能看出我做错了什么吗?
<?php
add_action(\'wp_ajax_nopriv_LogHit_callback\', \'LogHit_callback\');
add_action(\'wp_ajax_LogHit_callback\', \'LogHit_callback\');
function HitCount() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
action: \'LogHit_callback\',
PostId:\'<?php echo get_the_ID() ?>\'
};
jQuery.post(\'http://www.test.com/wp-admin/admin-ajax.php\', data, function( r ) {
alert( r );
});
</script>
<?php
function LogHit_callback() {
global $wpdb; // this is how you get access to the database
$postId = $_POST[\'PostId\'];
$hits = get_post_meta((int)$postId, \'hit-counter\', true);
$hits = $hits + 1;
update_post_meta((int)$postId, \'hit-counter\', (int)$hits);
return $postId;
exit; // this is required to return a proper result
}
}
它将以下内容写入我的HTML中,我在其中调用HitCount函数
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
action: \'LogHit_callback\',
PostId:\'86505\'
};
jQuery.ajax(\'http://www.lazygamer.net/wp-admin/admin-ajax.php\', data, function( r ) {
alert( r );
});
</script>
我知道将URL硬编码为admin ajax很糟糕,但我正在尝试排除问题。如果我在写入html的ajax调用中添加了一个警报,它就会工作,这样我就知道正在调用它。
但是插件文件中的第二个警报从未被调用?
最合适的回答,由SO网友:Mateusz Hajdziony 整理而成
没有PHP函数alert
, 这就是为什么函数会抛出一个错误,而不会继续处理其余代码的原因。你必须从LogHit_callback
函数使用return
(或者用echo
) 然后用JavaScript向其发出警报,即向post
功能:
jQuery.post( \'http://www.test.com/wp-admin/admin-ajax.php\', data, function( r ) {
alert( r );
});
我相信这是
post()
. 请记住,您始终可以使用浏览器的开发人员工具调试AJAX请求。然后你就会知道到底发生了什么。