You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress调用类内AJAX方法遇400错误,求解决方法

问题

之前在functions.php中直接编写WordPress AJAX函数,绑定钩子的代码如下:

add_action('wp_ajax_nopriv_myfunction', 'myfunction');
add_action('wp_ajax_myfunction', 'myfunction');

现在调整代码结构,将函数放到ds_calculators类中,前端AJAX代码:

$.ajax({
    type: 'POST',
    url: my_ajax.ajaxurl,
    data: { action : 'ds_calculators::myfunction', },
    success: function(data, textStatus, XMLHttpRequest) {
        jQuery('.changer').html(data);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        if (typeof console === "undefined") {
            console = {
                log: function() {},
                debug: function() {},
            };
        }
        if (XMLHttpRequest.status == 404) {
            console.log('Element not found.');
        } else {
            console.log('Error: ' + errorThrown);
        }
    }
});

后端绑定钩子的代码改为:

add_action('wp_ajax_nopriv_myFunction', 'ds_calculators::myFunction');
add_action('wp_ajax_myFunction', 'ds_calculators::myFunction');

现在请求出现400(错误请求),请问如何正确调用类中的AJAX方法?这是否是导致错误的原因?


解决方案

400错误的核心原因是AJAX action名称不匹配,同时类方法的绑定方式也需要规范调整,具体步骤如下:

1. 统一Action名称(大小写+格式)

WordPress的AJAX action名称区分大小写,且不建议使用::这类特殊字符(易引发解析问题),需保持前后端action名称完全一致:

  • 后端钩子的action后缀(即wp_ajax_/wp_ajax_nopriv_后的部分)要统一,比如设为ds_calculators_myfunction
  • 前端AJAX请求的action参数必须和后端后缀完全一致

2. 类方法的正确绑定方式

根据myFunction是静态方法还是实例方法,选择对应的绑定方式:

情况A:静态方法

如果myFunction是ds_calculators类的静态方法,绑定钩子时推荐用数组格式(更规范):

add_action('wp_ajax_nopriv_ds_calculators_myfunction', ['ds_calculators', 'myFunction']);
add_action('wp_ajax_ds_calculators_myfunction', ['ds_calculators', 'myFunction']);

也可以用字符串格式,但数组格式更符合WordPress编码规范:

// add_action('wp_ajax_nopriv_ds_calculators_myfunction', 'ds_calculators::myFunction');
// add_action('wp_ajax_ds_calculators_myfunction', 'ds_calculators::myFunction');

情况B:实例方法

如果myFunction是非静态方法,需要先实例化类,再绑定实例的方法:

// 先实例化类
$calculator = new ds_calculators();
// 绑定实例方法
add_action('wp_ajax_nopriv_ds_calculators_myfunction', [$calculator, 'myFunction']);
add_action('wp_ajax_ds_calculators_myfunction', [$calculator, 'myFunction']);

3. 调整前端AJAX请求

将前端的action参数改为和后端一致的名称:

data: { action : 'ds_calculators_myfunction' },

额外注意事项

  • 确保ds_calculators类已经被正确加载(比如通过自动加载器或手动include/require),否则会因找不到类/方法触发错误
  • 400错误大多是action参数不匹配或后端无对应钩子处理函数,优先检查名称一致性

内容的提问来源于stack exchange,提问作者hfw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:07