简谈wordpress中的ajax请求,为什么会一直返回“0”

来源:互联网 发布:电磁仿真软件 feko 编辑:程序博客网 时间:2024/06/07 01:31

最近我发布了一款数据导入wordpress的插件,有兴趣的可以看这里:http://levi.cg.am/archives/3759;优化这款插件的时候遇到一个问题,使用ajax向wordpress发起请求,返回回来的始终是0!

至于这个问题,我放后面谈,先简单说下wordpress的ajax请求。

发起请求

wordpress中要发起ajax请求不难,分别需要如下:

PHP记录一个ajax钩子,以便后续操作:

<?phpfunction 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');

从上面可以得出以下结论:

  1. wordpress是通过add_action记录一个ajax请求的钩子
  2. 钩子的名称前缀必须是“wp_ajax_”
  3. 钩子回调方法中必须通过“exit”或“die”来结束输出(后面会继续说明)
  4. 通过“wp_register_script”注册一个js,用于发起请求
js发起ajax请求:

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')); // 调用这个jswp_enqueue_script('request_data');

而之前的js也仅需要这么修改即可:

jQuery.ajax({    type: 'POST',    url: ajaxurl,    data: {        action: 'press_data',        form: request_data.url    },    success: function(res) {        // get res    }});

以上这些都不难,就提到这里,有不明白欢迎留言提问。

0 0
原创粉丝点击