WordPress wp_ajax返回400 Bad Request错误求助
WordPress admin-ajax.php 返回400错误修复方案
核心错误原因
WordPress AJAX接口的匹配规则是:前端POST请求中action字段的值,必须和后端wp_ajax_*/wp_ajax_nopriv_*钩子的后缀完全一致,否则WordPress找不到对应处理逻辑,会直接返回400 Bad Request。
你当前代码的匹配关系完全错误:
- 前端JS提交的
action值为send_form - 后端PHP注册AJAX钩子时用的后缀为
findajob_admin_ajax
两者不匹配是报错的根本原因。
其他代码问题
- 表单标签属性书写错误:
<form type="POST">是无效写法,指定表单提交方式的属性是method,正确写法为<form method="POST">,虽然当前用AJAX提交不触发原生表单提交,但建议修正避免后续出问题。 - 代码存在冗余:
findajob_load_scripts和findajob_shortcode两个函数中重复定义了$current_page变量,短代码函数内的该变量没有实际使用,可以删除。
修复步骤
- 修改前端JS代码中的action参数值,和后端保持一致,修正后的JS代码:
$(document).ready(function($){ $('button[name="Test"]').on('click', function(e){ e.preventDefault(); $.ajax({ url: findjob.ajaxurl, type: 'POST', data: { 'action': "findajob_admin_ajax" }, success: function(Resp) { alert(Resp); }, error: function(a, b, c) { console.log(a, b, c); } }); }); });
- (可选安全优化)增加nonce校验,避免跨站请求伪造:
修改PHP端脚本本地化逻辑,传入生成的nonce:
wp_localize_script('findajob-js', 'findjob', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'current_page' => $current_page, 'ajax_nonce' => wp_create_nonce('findajob_ajax_verify') ));
在AJAX处理函数开头增加nonce校验逻辑:
function findajob_admin_ajax() { // 校验nonce,校验不通过直接返回403 check_ajax_referer('findajob_ajax_verify', 'ajax_nonce'); echo "testing"; wp_die(); }
前端提交数据时带上nonce参数:
data: { 'action': "findajob_admin_ajax", 'ajax_nonce': findjob.ajax_nonce }
修改完成后清空站点缓存、浏览器缓存再测试,即可正常收到testing的响应内容。
内容的提问来源于stack exchange,提问作者Luke Clynes
相关产品推荐
相关产品推荐

