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

WordPress调用admin-ajax.php返回400 Bad Request错误排查

WordPress后台AJAX调用返回400 Bad Request修复方案

代码层面直接错误(直接触发400问题)

  • 修复PHP语法错误:注册AJAX钩子的代码存在未闭合单引号,会触发PHP语法解析错误,导致代码无法正常运行。修正后的PHP代码:
function myFunction()
{
    wp_send_json_success('DONE');
}
// 补全myFunction后的单引号
add_action('wp_ajax_my_function', 'myFunction'); 
// 后台场景无需注册nopriv钩子,可直接删除该行
// add_action('wp_ajax_nopriv_my_function', 'myFunction');

wp_register_script("my_fast_generate_script", my_dir_url . 'assets/js/ajax-my-fast-generate.js', array('jquery'));
wp_localize_script('my_fast_generate_script', 'my_fast_generate_Ajax', array('ajaxurl' => admin_url('admin-ajax.php'))); 
wp_enqueue_script('my_fast_generate_script');

注意:用wp_send_json_success()返回数据时,会自动输出标准JSON格式并终止程序执行,不需要手动写echo和wp_die()。

  • 修正前端AJAX的action参数:WordPress AJAX的匹配规则为wp_ajax_[前端传的action值],你注册的钩子后缀是my_function,但前端传的action值为myFunction,名称完全不匹配会导致WordPress找不到对应处理函数,直接返回400。修正后的JS代码:
jQuery(function ($) {
    $('#fast_generate').on('click', function (e) {
        e.preventDefault();
        
        console.log("JS触发正常");

        $.ajax({
            type: 'POST',
            url: my_fast_generate_Ajax.ajaxurl,
            dataType: 'json',
            data: {
                action: 'my_function', // 和钩子后缀完全一致,大小写、符号不能有差异
            },
            success: function (response) {
                console.log("请求成功", response);
            },
            error: function (errorThrown) {
                console.log("请求错误", errorThrown);
            },
        });
    });
});

如果你不需要返回JSON格式数据,直接删除dataType: 'json'配置即可,避免因返回格式不合法触发错误回调。

环境配置问题排查

  • Nginx不识别.htaccess文件:.htaccess是Apache服务器专用的分布式配置文件,Nginx环境下该文件完全不生效,在根目录添加.htaccess不会对路由、请求规则产生任何影响,无需在该文件上浪费排查时间。如果需要调整Nginx的请求规则,直接修改Nginx站点配置文件,修改后执行重载命令生效。
  • 修正文件权限:全局设置777权限属于极高风险操作,不仅会让站点面临被入侵的风险,还大概率会触发服务器WAF、主机安全防护规则拦截POST请求,直接返回400。请将权限修正为安全值:
    • 所有目录权限设置为755
    • 所有文件权限设置为644
    • wp-content/uploads等需要写入权限的目录可单独配置,禁止全局使用777权限
  • 其他排查方向:
    • 打开浏览器开发者工具的「网络」面板,找到admin-ajax.php的请求,查看响应正文内容,可直接定位具体报错(如PHP语法错误、安全拦截提示等)
    • 若安装了WordPress安全插件、服务器开启了WAF防护,可暂时关闭测试是否为规则误拦截
    • 确认my_dir_url常量定义正确,JS文件可正常加载,控制台无JS资源404报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:27:26