2015-01-21 92 views
0

我想知道当服务器端期望JSON时,提交表单的正确方式是什么。服务器使用express框架在node.js中实现。为了解析请求主体,使用bodyparser.json()中间件。发布JSON的正确方法Formdata

目前我拦截使用JavaScript提交,然后创建一个formdata对象,该对象反过来使用ajax发布。

我的这个实现的问题是POST的响应是用户应该被重定向到的整个页面。我想用响应的内容替换页面的HTML内容,但对我来说这看起来很脏,并且还保持浏览器URL不变。

TL; DR:如何提交表单以便它可以通过req.body.myObj以express方式访问,并且浏览器被重定向到响应?

感谢您的想法。

+0

为什么不直接发布'application/x-www-form-urlencoded'数据,而这正是大多数服务器所期望的,包括节点的bodyparser? – adeneo 2015-01-21 10:03:00

+0

我喜欢req.body.whatever提交的表单如何在没有任何麻烦的情况下使用JSON提交的方式。也许我会切换到req.param – 2015-01-21 10:10:44

回答

0

表单没有支持的方式提交JSON格式的请求。 (有关不受支持的方式,请参阅W3C HTML JSON form submission)。

唯一的方法就是使用Ajax。然后,您可以根据响应(普通Ajax)修改DOM,或者通过设置location(并在会话中/通过URL/etc(这相当于破解)传递数据)来发出GET请求。

最好的方法通常是预留预计会对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的代码。