今天在写一个wordpress插件时遇到一个问题,客户端向服务器发送ajax请求得到的响应response值为0。
js代码如下:
jQuery("#testAjax").click(function () { $data={ action: 'get_items', security:'<?php echo wp_create_nonce("my-special-string");?>', mystring:'hello' }; jQuery.post( ajaxurl, $data, function (response) { alert('response:'+response); }, "text" ); });
还有个现象就是我在对处理ajax请求的函数进行debug时,也不能触发调试程序。很奇怪。
下面是处理ajax请求的php代码:
class Item{ public function __construct(){ add_action('admin_menu', array($this,'init'), 20); } public function init(){ add_action('wp_ajax_get_items',array($this,'getItems')); } public function getItems(){ check_ajax_referer( 'my-special-string', 'security' ); echo 'This is getItems return'; die(); } }
遇见过这个问题的人可能一眼就看出问题所在了。我弄了大概两个多小时。有人说在处理请求的函数后面添加“die()”……都没有解决问题。
最后在一个讨论页面看到这样的一个回复“You have to put the add_action at the complete bottom of your file or else it won't find the callback function”(url),感觉有道理于是我把
add_action('wp_ajax_get_items',array($this,'getItems'));
挪到插件入口文件改成:
$item=new Item(); add_action('wp_ajax_get_items',array($item,'getItems'));
问题即解决。
“必须把 add_action()放在文件末尾,否则wp就找不到你定义的回调函数”。