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

使用Express在服务器端获取AJAX POST请求req.body中的值

问题解决:AJAX发送JSON后后端req.body解析异常

核心问题原因

你遇到的情况是客户端发送的JSON数据未被后端正确解析,根源在于:

  • 手动将数据转成JSON字符串后,未告知后端这是JSON格式请求(缺少Content-Type: application/json请求头),导致express.json()中间件不生效,反而被bodyParser.urlencoded当成表单数据解析,最终把整个JSON字符串当作键、值为空。
  • 手动使用JSON.stringify转字符串时,jQuery默认不会自动设置正确请求头,后端自然无法解析出有效数据。

具体修复步骤

1. 修正客户端AJAX代码

不要手动将rowData转为JSON字符串,直接传递原始对象/数组,并显式设置contentType为application/json:

// 示例:假设rowData是要发送的数组
const rowData = [{ value1: 'testValue', key1: 'testKey' }];

$.ajax({
  url: '/api/entities/liquid',
  method: 'POST',
  contentType: 'application/json', // 关键:告诉后端请求格式为JSON
  data: JSON.stringify(rowData), // 将对象/数组转为JSON字符串传递
  success: function(res) {
    console.log('请求成功', res);
  },
  error: function(err) {
    console.error('请求失败', err);
  }
});

也可以用更简洁的写法(jQuery会自动处理序列化,但需确保传递的是对象而非字符串):

$.ajax({
  url: '/api/entities/liquid',
  method: 'POST',
  data: rowData,
  dataType: 'json',
  contentType: 'application/json',
  success: function(res) { ... }
});

2. 确认后端中间件顺序

确保express.json()中间件在路由之前加载,保证所有POST请求先经过JSON解析:

const express = require('express');
const app = express();

// 先加载JSON解析中间件
app.use(express.json());
// urlencoded中间件用于处理表单数据,可保留但不影响JSON请求
app.use(bodyParser.urlencoded({ extended: true }));

// 加载路由
app.post('/api/entities/liquid', (req, res) => {
  console.log(req.body); // 现在能拿到正确的数组/对象
  // 若rowData是数组,通过req.body[0].value1取值
  const targetValue = req.body[0].value1;
  if (targetValue) {
    res.status(200).send('参数获取成功');
  } else {
    res.status(400).send('参数错误');
  }
});

3. 验证请求Payload

在浏览器开发者工具的Network面板中查看POST请求的Payload:

  • 正确格式应为[{ "value1": "testValue", "key1": "testKey" }],而非{"[{\"value1\":\"testValue\"}]": ""}这类错误格式。

常见误区排查

  • 不要混用JSON.stringify和urlencoded格式:手动转字符串时必须设置contentType: application/json,否则后端会当作表单数据解析。
  • 不要用req.query或req.params获取POST请求体数据:这两个分别对应URL查询参数和路由参数,与请求体无关。
  • 另一个表单能用data[0].value1是因为它是application/x-www-form-urlencoded格式,和JSON请求的解析逻辑完全不同,不要混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:36