WordPress中Ajax请求出现400 Bad Request错误,求解决方案
解决WordPress AJAX请求400 Bad Request错误
以下是针对你遇到问题的具体解决方案,按优先级排序:
1. 必须添加CSRF Nonce验证
WordPress的admin-ajax.php对POST请求强制要求Nonce验证,缺少验证是触发400错误的最常见原因。
后端修正(将代码放在主题functions.php或自定义插件中)
// 处理sendsms请求 function sendsms_function(){ // 验证Nonce,第一个参数是自定义动作名,第二个是前端传递的参数名 check_ajax_referer('ajax_nonce', 'security'); // 使用wp_send_json输出标准JSON格式内容,替代echo wp_send_json('hello'); } add_action('wp_ajax_nopriv_sendsms', 'sendsms_function'); add_action('wp_ajax_sendsms', 'sendsms_function'); // 处理get_data请求 function get_data() { check_ajax_referer('ajax_nonce', 'security'); wp_send_json('test'); } add_action( 'wp_ajax_nopriv_get_data', 'get_data' ); add_action( 'wp_ajax_get_data', 'get_data' );
前端修正
<button type="button" class="btn woocommerce-Button button" id="sendsms" name="sendsms" >send</button> <script> jQuery(document).ready(function($){ $("#sendsms").click(function(){ jQuery.ajax({ type: "post", dataType: "json", // 使用WordPress提供的函数生成绝对路径,避免相对路径出错 url: "<?php echo admin_url('admin-ajax.php'); ?>", data: { action:'get_data', id: 4, // 传递生成的Nonce值 security: "<?php echo wp_create_nonce('ajax_nonce'); ?>" }, success: function(msg){ alert(msg); }, error: function(xhr, status, error){ // 打印错误详情到控制台,方便调试 console.log(xhr.responseText); alert('请求错误: ' + error); } }); }); }); </script>
2. 修正函数注册位置
不要将add_action和处理函数直接放在页面模板中,必须放在主题functions.php或自定义插件文件内,否则WordPress无法正确注册AJAX钩子,导致请求找不到对应处理函数,触发400错误。
3. 匹配响应格式与dataType
前端指定了dataType: "json",后端必须输出合法的JSON格式内容。使用wp_send_json()函数替代echo,它会自动设置正确的响应头并将内容转为JSON格式,避免解析错误。
4. 其他排查点
- 检查安全插件:如Wordfence、iThemes Security等可能会拦截未带Nonce的AJAX请求,需在插件设置中添加例外或确保Nonce验证正确。
- 固定链接配置:如果使用了自定义固定链接,确保
.htaccess文件配置正确,可尝试切换回默认固定链接测试。
内容的提问来源于stack exchange,提问作者hamidsolat
相关产品推荐
相关产品推荐

