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

WordPress AJAX请求报400错误,无法触发后端回调函数求助

解决WordPress AJAX请求400 Bad Request错误

你的请求触发400错误主要有两个关键问题:

1. 未登录用户的AJAX钩子名称错误

在inc/ajax_functions.php中,wp_ajax_nopriv的钩子后缀必须匹配你的action值(get_branches),而非回调函数名。当前错误的钩子会导致未登录用户的请求找不到对应回调。

2. AJAX请求的参数配置错误

JS里的processData: false和contentType: false是文件上传场景专用配置,普通POST请求下会阻止jQuery正确序列化数据,导致WordPress无法解析action参数,直接返回400错误。


修正后的代码:

1. 修正inc/ajax_functions.php的钩子:

function get_branches_callback()
{
    if (!check_ajax_referer('WDD_ajax_nonce', 'security', false)) {
        wp_send_json_error(array('error' => 'Invalid security token.'));
    }

    // 可在此添加业务逻辑,示例返回成功数据
    wp_send_json_success(array('message' => '请求成功'));

    die();
}

add_action('wp_ajax_get_branches', 'get_branches_callback');
// 修正nopriv钩子名称,与action值匹配
add_action('wp_ajax_nopriv_get_branches', 'get_branches_callback');

2. 修正ajax_functions.js的AJAX配置:

jQuery.noConflict();
jQuery(document).ready(function ($) {

  const data = {
    action: 'get_branches',
    security: WDD_ajax_object.WDD_ajax_nonce
  };
  console.log(WDD_ajax_object.WDD_ajax_url);
  jQuery.ajax({
    url: WDD_ajax_object.WDD_ajax_url,
    type: 'POST',
    data: data,
    // 移除不必要的文件上传配置
    // processData: false,
    // contentType: false,
    success: function (response) {
      if (response.success === false) {
        console.log('Request failed.' + response.data.error);
      } else {
        console.log(response.data);
      }
    },
    error: function (xhr, status, error) {
      // 添加错误日志便于调试
      console.log('AJAX Error:', xhr.status, error);
    }
  });
});

额外调试建议:

  • 打开浏览器开发者工具网络面板,查看请求的Form Data,确认action和security参数是否正确发送到服务器。
  • 若问题仍存在,可在回调函数开头添加error_log('回调函数已触发');,开启WP_DEBUG后查看wp-content/debug.log,确认函数是否被调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:51:00