无法传送AJAX要求,不确定问题出在哪里

时间:2019-07-05 15:46:51

标签: jquery node.js ajax

我正尝试在更改(选择选择器)上发送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)

我真的很感谢我在这里做错什么的解释,因为我对为什么这样做不满意有些困惑。谢谢。

1 个答案:

答案 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