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

本文介绍了在WordPress中实现AJAX请求的方法,包括如何定义PHP钩子、注册JS文件及发起POST请求等关键技术点。

最近我发布了一款数据导入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');

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值