最近我发布了一款数据导入wordpress的插件,有兴趣的可以看这里:http://levi.cg.am/archives/3759;优化这款插件的时候遇到一个问题,使用ajax向wordpress发起请求,返回回来的始终是0!
至于这个问题,我放后面谈,先简单说下wordpress的ajax请求。
发起请求
wordpress中要发起ajax请求不难,分别需要如下:
PHP记录一个ajax钩子,以便后续操作:
<?php
function press_data()
{
// do it...
exit;
}
wp_register_script('request_data', plugins_url('request_data.js', __FILE__), array('jquery'));
wp_enqueue_script('request_data');
add_action('wp_ajax_press_data', 'press_data');
从上面可以得出以下结论:
- wordpress是通过add_action记录一个ajax请求的钩子
- 钩子的名称前缀必须是“wp_ajax_”
- 钩子回调方法中必须通过“exit”或“die”来结束输出(后面会继续说明)
- 通过“wp_register_script”注册一个js,用于发起请求
jQuery.ajax({
type: 'POST',
url: ajaxurl,
data: {
action: 'press_data'
},
success: function(res) {
// get res
}
});
从上面可以得出以下结论:
- url请求地址为一个固定的变量:ajaxurl
- 请求的“data”数据中必须有一个“action”属性,属性值必须和之前ajax记录请求的钩子名称对应
这些并不难,如果说还要增加点花样的话,比如说php传个值让ajax请求时带上,那么可以通过函数:wp_localize_script,如下:
// 注册一个钩子
wp_register_script('request_data', plugins_url('request_data.js', __FILE__), array('jquery'));
// 传递一个值
wp_localize_script('request_data', 'request_data', array(
'url' => 'http://levi.cg.am'
));
// 调用这个js
wp_enqueue_script('request_data');
而之前的js也仅需要这么修改即可:
jQuery.ajax({
type: 'POST',
url: ajaxurl,
data: {
action: 'press_data',
form: request_data.url
},
success: function(res) {
// get res
}
});
以上这些都不难,就提到这里,有不明白欢迎留言提问。