新手求助:如何通过jQuery AJAX POST请求正确传递变量并在服务器端获取?
解决jQuery AJAX POST请求后服务器端req.body为undefined的问题
嘿,我来帮你搞定这个问题~你遇到的req.body显示undefined的核心原因是Express服务器默认不会自动解析POST请求的请求体,得先配置对应的中间件来处理请求数据,下面是具体的解决步骤:
1. 配置Express请求体解析中间件
Express(4.16版本及以上)自带了请求体解析的中间件,不需要额外安装body-parser,直接在你的主服务器文件(比如app.js或者引入router的文件)里添加以下代码,注意要放在路由定义之前:
// 处理application/x-www-form-urlencoded格式的数据(jQuery AJAX默认发送的格式) app.use(express.urlencoded({ extended: true })); // 可选:如果需要处理JSON格式的请求,加上这行 app.use(express.json());
如果你的Express版本低于4.16,需要先安装body-parser依赖:
npm install body-parser
然后引入并使用:
const bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());
2. 优化前端AJAX代码(可选但更稳妥)
你的前端代码本身逻辑没问题,但可以明确指定contentType,避免潜在的格式识别问题:
修改inventory.js中的AJAX配置:
$('form').on('submit', function() { var temp = {test: 0} $.ajax({ type: 'POST', url: '/inventoryactionbtn', data: temp, contentType: 'application/x-www-form-urlencoded; charset=UTF-8', // 明确指定请求格式 success: function(data) { console.log('服务器响应:', data); // 可以在这里打印服务器返回的内容 } }); return false; })
3. 完善服务器端代码
现在req.body就能正确获取到前端发送的数据了,你可以直接打印整个对象或者具体属性,另外记得给前端返回响应,避免请求一直处于pending状态:
修改Index.js中的路由处理:
router.post('/inventoryactionbtn', ensureAuthenticated, function(req, res) { var testing = req.body; console.log('收到的请求数据:', testing); // 现在会输出 { test: 0 } console.log('test字段的值:', testing.test); // 也可以单独获取具体属性 // 返回响应给前端 res.status(200).json({ message: '数据接收成功', receivedData: testing }); })
额外:如果想发送JSON格式的数据
如果你希望前端发送JSON格式的请求,只需要调整前端代码,把数据转成JSON字符串并修改contentType:
$('form').on('submit', function() { var temp = {test: 0} $.ajax({ type: 'POST', url: '/inventoryactionbtn', data: JSON.stringify(temp), contentType: 'application/json', success: function(data) { console.log('服务器响应:', data); } }); return false; })
这时候服务器端因为已经配置了express.json()中间件,依然能正确解析req.body。
内容的提问来源于stack exchange,提问作者SpringerJerry
相关产品推荐
相关产品推荐

