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

WordPress admin-ajax.php返回400错误及响应0的问题求助

解决WordPress admin-ajax.php 400 Bad Request错误(响应内容为0)

问题场景

开发WordPress插件时,通过AJAX调用admin-ajax.php返回400 Bad Request错误,网络面板中响应内容为0,控制台报错详情如下:

POST http://localhost/mywordpress/wordpress/wp-admin/admin-ajax.php 400 (Bad Request)
Error loading counties: 
{readyState: 4, status: 400, statusText: "Bad Request", responseText: "0", ...}

相关代码

script.js

$.ajax({
    url: city_generator.ajax_url,
    type: 'POST',
    data: {
        nonce: city_generator.nonce,
        action: 'load_counties',
        state: state,
    },
    success: function (response) {
        console.log('County response:', response);
    },
    error: function (error) {
        console.error('Error loading counties:', error);
    },
});

admin-page.php

// Example: Load counties based on state
add_action('wp_ajax_load_counties', 'load_counties_callback');
add_action('wp_ajax_nopriv_load_counties', 'load_counties_callback');

function load_counties_callback() {
    $nonce = $_POST['nonce'];
    check_ajax_referer('ajax-nonce', 'nonce');  // Verify the nonce
    if (isset($_POST['state'])) {
        $state = sanitize_text_field($_POST['state']);
        $counties = get_counties_by_state($state);
        wp_send_json_success(array('counties' => $counties));
    }
    wp_die();
}

city-generator.php

add_action('admin_enqueue_scripts', 'city_generator_admin_enqueue_scripts');
function city_generator_admin_enqueue_scripts($hook) {
    if ($hook === 'settings_page_city-generator') {
        wp_enqueue_script('city-generator-script', plugin_dir_url(__FILE__) . 'assets/script.js', array('jquery'), null, true);
        wp_enqueue_style('city-generator-style', plugin_dir_url(__FILE__) . 'assets/style.css');
        wp_localize_script('city-generator-script', 'city_generator', array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'nonce' => wp_create_nonce('ajax-nonce'),
        ));
    }
}

排查与修复步骤

  • 确认钩子已正确注册:检查admin-page.php是否被主插件文件(如city-generator.php)通过require_once或include引入。如果未加载该文件,wp_ajax_load_counties钩子不会被注册,WordPress找不到对应回调函数会直接返回0。

  • 验证Nonce一致性:虽然代码中wp_create_nonce('ajax-nonce')和check_ajax_referer('ajax-nonce', 'nonce')的action参数一致,仍可通过调试确认:

    1. 在load_counties_callback开头添加代码:
      error_log('Received nonce: ' . $_POST['nonce']);
      error_log('Generated nonce: ' . wp_create_nonce('ajax-nonce'));
      
    2. 查看WordPress的debug.log(需开启WP_DEBUG),对比两个nonce是否一致。若不一致,检查admin_enqueue_scripts的钩子触发时机,确保wp_localize_script在正确页面调用。
  • 检查前端state变量有效性:在AJAX请求前添加console.log(state),确认变量有有效值。若state为undefined,可能触发后续逻辑问题,同时需确保请求参数格式正确。

  • 临时关闭Nonce验证测试:注释掉check_ajax_referer一行后重新发起请求,若请求成功,说明问题出在Nonce验证环节,需重新检查nonce的生成和传递流程。

  • 确认钩子优先级:给add_action添加优先级参数(默认10),确保钩子在合适时机注册:

    add_action('wp_ajax_load_counties', 'load_counties_callback', 10);
    add_action('wp_ajax_nopriv_load_counties', 'load_counties_callback', 10);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:00:23