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

WordPress Ajax请求返回400(Bad request)错误,寻求问题排查

排查WordPress Ajax返回400 Bad Request的问题

从你给出的代码片段来看,最核心的问题大概率是没给Ajax处理函数注册WordPress专属的钩子,再加上前端请求可能缺少关键参数,才导致了400错误。下面一步步帮你定位解决:

1. 必须为Ajax函数注册钩子

WordPress的Ajax请求是通过admin-ajax.php统一处理的,你需要给send_message_function注册wp_ajax_*和wp_ajax_nopriv_*钩子,否则系统找不到对应的处理逻辑,直接返回400。

修改你的functions.php,添加这两行代码:

// 允许登录用户触发这个Ajax请求
add_action('wp_ajax_send_message', 'send_message_function');
// 允许未登录用户触发(如果你的功能需要对外开放的话)
add_action('wp_ajax_nopriv_send_message', 'send_message_function');

这里的send_message是你前端请求里必须传递的action参数值,要和钩子名称的后缀完全一致。

2. 前端Ajax请求必须包含action参数

确保你的main.js里的Ajax请求正确传递了action参数,示例代码如下:

jQuery.ajax({
    url: WPaAjax.ajaxurl, // 用wp_localize_script传递的正确地址
    type: 'POST',
    data: {
        action: 'send_message', // 必须和钩子后缀匹配
        // 这里可以加其他需要传递的参数,比如表单数据
    },
    success: function(response) {
        console.log(response); // 应该能打印出'YES!'
    },
    error: function(xhr) {
        console.log(xhr.statusText);
    }
});

如果前端没传这个action参数,admin-ajax.php根本不知道要调用哪个函数,直接返回400错误。

3. 其他可能的排查点

  • 确认请求地址正确:在浏览器控制台打印console.log(WPaAjax),检查ajaxurl的值是不是正确的wp-admin/admin-ajax.php路径。
  • 请求方法与参数传递:优先用POST请求(WordPress对POST的兼容性更好),确保所有参数都放在data对象里,不要拼在URL上(GET请求也可以,但容易出现参数丢失或编码问题)。
  • 安全验证(可选但推荐):虽然不是400错误的直接原因,但为了安全,建议添加nonce验证。修改你的load_scripts函数:
function load_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('main_js', get_stylesheet_directory_uri() . '/dist/scripts/main.js', array('jquery'), true);
    wp_localize_script('main_js', 'WPaAjax', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('send_message_nonce') // 生成验证串
    ));
}

前端请求里加上_wpnonce: WPaAjax.nonce,再在PHP函数开头验证:

function send_message_function() {
    if (!wp_verify_nonce($_POST['_wpnonce'], 'send_message_nonce')) {
        wp_die('非法请求');
    }
    echo 'YES!';
    exit;
}

按照上面的步骤调整后,应该就能解决400错误的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:18:31