【问题标题】:Proper way of POSTing JSON FormdataPOST JSON Formdata 的正确方法
【发布时间】:2015-01-21 18:03:52
【问题描述】:

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

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

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

TL;DR:如何提交一个表单,以便它可以通过 req.body.myObj 在 express 中访问并将浏览器重定向到响应?

感谢您的想法。

【问题讨论】:

  • 为什么不直接发布 application/x-www-form-urlencoded 数据,这是大多数服务器所期望的,包括节点的 bodyparser ?
  • 我喜欢提交的表单在 req.body.whatever 中变得可用的方式,如果它以 JSON 格式提交,则不会有任何麻烦。也许我会切换到 req.param

标签: jquery html node.js express


【解决方案1】:

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

唯一的方法是使用 Ajax。然后,您可以根据响应(普通 Ajax)修改 DOM,或者通过设置 location (并在会话中/通过 URL/等传递数据(这相当 hack))发出 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的代码。

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2019-05-12
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多