我正尝试在更改(选择选择器)上发送ajax请求。似乎该部分工作正常。但是,当我尝试访问发送的数据时,我得到的是req.body.selected是未定义的。而且不确定是否相关,当我查看网络镶边时,我发现请求处于待处理状态。
我在控制器功能中放入了调试打印,看来它确实可以送到我想要的控制器上。
我在控制器功能中放入了调试打印,看来它确实可以送到我想要的控制器上。
到目前为止,我已经推断出: 1.它实际上进入控制器,因此ajax调用中的url正常工作 2.出于某种原因无法发送数据?
这是ajax调用:
$.ajax({
url: 'pickenv',
dataType: 'json',
contentType: 'application/json',
type: 'POST',
data: {'selected' : selected}
});
这是控制器功能:
exports.getEnv = (req, res, next) => {
console.log('im here!');
console.log(req.body.selected);
}
这是我的路线:
router.use('/pickenv', mainControl.getEnv);
router.get('/', mainControl.getIndex);
这是我在服务器端输出中看到的内容:
Listening on port 3000
im here!
TypeError: Cannot read property 'selected' of undefined
at exports.getEnv (C:\Users\Christopher Dani\Documents\Web Project\Release\controllers\main-control.js:19:26)
at Layer.handle [as handle_request] (C:\Users\Christopher Dani\Documents\Web Project\Release\node_modules\express\lib\router\layer.js:95:5)
我真的很感谢我在这里做错什么的解释,因为我对为什么这样做不满意有些困惑。谢谢。
答案 0 :(得分:0)
来自https://expressjs.com/en/api.html,位于要求正文下
包含在请求正文中提交的键/值数据对。通过 默认情况下,它是未定义的,并且在使用body-parsing时填充 中间件,例如express.json()或express.urlencoded()。
您需要将正文解析添加到中间件中以填充正文。
app.use(express.json()) // for parsing application/json
app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded