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
相关产品推荐
相关产品推荐

