You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js调用WordPress admin-ajax.php发POST返回400和0如何配置

问题核心原因

你当前遇到的400+返回0的问题,本质是WordPress原生admin-ajax接口默认不支持JSON格式的请求体,只能读取application/x-www-form-urlencoded类型的表单编码参数,后端识别不到你传的action参数,就会直接返回0和400状态码。

修复步骤
  • 更换请求体格式为表单编码格式,不要使用JSON序列化参数
  • 补充Content-Type和Content-Length请求头,让WordPress能正常解析参数
  • 如果后端自定义action做了nonce校验,需要额外补充_wpnonce参数,值可从站点对应页面的源码(隐藏input字段或前端全局JS变量)中获取
  • 确认你使用的Cookie为有效登录态Cookie:如果自定义action是仅登录用户可调用的wp_ajax_{action}钩子,Cookie权限不匹配也会返回0
修复后完整代码示例
const https = require("https");
const qs = require("querystring"); // 引入Node内置querystring模块做表单编码

const data = {
  action: "create_chapter",
  postID: "2676",
  chapterName: "2",
  chapterContent: "test",
  // _wpnonce: "你的站点对应nonce值", // 后端有校验时打开这行补充参数
};
// 把参数转为表单编码格式
const postData = qs.stringify(data);

const options = {
  hostname: "www.website.com",
  path: "/wp-admin/admin-ajax.php",
  method: "POST",
  headers: {
    "Cookie": "替换为你的有效登录Cookie",
    "X-Requested-With": "XMLHttpRequest",
    "Content-Type": "application/x-www-form-urlencoded", // 必填请求头
    "Content-Length": Buffer.byteLength(postData) // 准确设置请求体长度
  },
};

const req = https.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
  res.on("data", (d) => {
    process.stdout.write(d);
  });
});
req.on("error", (error) => {
  console.error(error);
});

req.write(postData); // 发送表单编码的请求体,不要传JSON
req.end();
额外排查点

如果修改后仍返回0:

  • 确认后端自定义action钩子注册正确:需要根据调用场景注册wp_ajax_create_chapter(登录用户调用)和wp_ajax_nopriv_create_chapter(未登录用户调用),回调函数执行完成后必须调用wp_die()结束请求,否则也会默认返回0
  • 确认你传的action参数值和钩子后缀完全一致,大小写敏感

内容的提问来源于stack exchange,提问作者Sezer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:06:03