我想知道提交表单的正确方法是什么时候服务器端需要JSON。服务器使用express框架在node.js中实现。要解析请求体,使用bodyparser.json()中间件。
目前,我使用JavaScript拦截提交,然后创建formdata的对象,然后使用ajax进行POST。
我对此实现的问题是POST的响应是用户应该重定向到的整个页面。我想用替换响应的内容替换页面的HTML内容,但这对我来说似乎很脏,并且还保持浏览器URL不变。
TL; DR:如何提交表单以便可以通过Express中的req.body.myObj访问该表单,并将浏览器重定向到响应中?
感谢您的想法。
答案 0 :(得分:0)
表单没有受支持的方式来提交JSON格式的请求。 (有关不受支持的方式,请参阅W3C HTML JSON form submission)。
唯一的方法是使用Ajax。然后,您可以根据响应(正常的Ajax)修改DOM,或者通过设置location
(并在会话中传递数据/通过URL / etc(这是一个hack))来发出GET请求。 / p>
最佳方法通常是保留期望HTTP API的JSON请求的端点,并在您希望处理常规表单提交时编写期望表单url编码或多部分数据的端点。
// Don't do this
app.use(bodyParser.json()); // for parsing application/json
// Do this most of the time
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
// Do this if you have file inputs
app.use(multer()); // for parsing multipart/form-data
来自the express docs的代码。