WordPress后台AJAX表单请求返回400 Bad Request问题求助
WordPress后台AJAX表单返回400 Bad Request的排查与修复
核心原因:缺失Nonce安全验证
WordPress后台的AJAX请求强制要求验证nonce(安全令牌),如果请求中没有携带合法的nonce,系统会直接返回400错误,这是你当前问题的最可能诱因。
修复步骤
- 在前端代码中添加nonce字段
修改输出AJAX脚本的函数,生成并携带nonce到请求数据中:
add_action('admin_footer', 'vitrin_admin_ajax'); function vitrin_admin_ajax() { // 生成专属nonce令牌 $pm_nonce = wp_create_nonce('vitrin_pm_nonce'); ?> <script> (function($) { $('.vitrin-private-message-form').submit(function(event) { event.preventDefault(); jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', type: 'post', data: { action: 'submit_vitrin_pm', _wpnonce: '<?php echo $pm_nonce; ?>', // 新增nonce字段 ppmcontent: jQuery('#pmcontent').val(), ppmusers: jQuery('#pmusers').val(), }, success: function(data) { alert(data) }, error: function(xhr) { console.log(xhr.responseText); // 控制台查看具体错误信息 } }); }) })(jQuery); </script> <?php }
- 在AJAX处理函数中验证nonce
修改后端处理函数,先验证请求的合法性:
function submit_vitrin_pm() { // 验证nonce是否有效 if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'vitrin_pm_nonce')) { wp_send_json_error('无效的请求令牌'); die(); } echo 'ssss'; die(); } add_action('wp_ajax_submit_vitrin_pm', 'submit_vitrin_pm'); // 注:wp_ajax_nopriv_* 钩子用于前台未登录用户,后台请求无需添加此钩子
其他排查方向
- 检查action参数一致性:确保AJAX请求中的
action值与后端钩子wp_ajax_xxx的xxx部分完全一致(大小写敏感)。 - 确认表单元素存在:检查页面中是否确实存在
id="pmcontent"和id="pmusers"的元素,避免选择器错误导致参数无法获取。 - 排查jQuery冲突:在浏览器控制台输入
jQuery,确认能正常输出对象,排除其他插件修改jQuery导致的冲突。 - 查看错误详情:打开浏览器开发者工具(F12)→ Network标签,找到
admin-ajax.php请求,查看Response中的具体错误提示,WordPress会返回明确的问题说明。
内容的提问来源于stack exchange,提问作者Amirhossein Yaldoughie
相关产品推荐
相关产品推荐

