在WordPress中使用Ajax时遭遇400 Bad Request错误,求排查解决
WordPress AJAX 400错误排查与解决
一、核心错误:钩子语法写错
看你functions.php里的这行代码:
add_action("wp_ajax_publication_filter_function]", "publication_filter_function");
wp_ajax_publication_filter_function后面多了个**]**,这会导致WordPress无法识别这个钩子,找不到对应的处理函数,直接返回400错误。删掉多余的方括号即可:
add_action("wp_ajax_publication_filter_function", "publication_filter_function");
二、补充两个关键优化(避免后续问题)
- 完善Nonce验证
你前端代码里获取了nonce_val,但页面没输出这个字段,后端也没做验证,补上:
- 在页面模板中添加nonce隐藏字段:
<input type="hidden" class="filter_ajax_nonce" value="<?php echo wp_create_nonce('publication_filter_nonce'); ?>">
- 在后端处理函数里验证nonce并规范输出:
function publication_filter_function(){ // 验证请求合法性 if(!wp_verify_nonce($_POST['nonce'], 'publication_filter_nonce')){ wp_send_json_error('无效请求'); } // 用WordPress自带函数返回JSON响应,自动处理响应头并终止输出 wp_send_json_success("Response hello"); }
- 前端回调适配JSON响应
因为后端用了wp_send_json_success,前端success回调要调整成读取JSON格式的返回值:
success: function(response) { console.log(response.data); // 会输出"Response hello" },
错误响应截图

内容的提问来源于stack exchange,提问作者Sudipta Das
相关产品推荐
相关产品推荐

