使用HTML表单时如何在HTTP请求正文中发送数据?

Sha*_*rog 18 html forms http http-post

HTTP规范说POST请求可以包含任意数据体.

HTML form元素可以POST到URL并可能包含input元素,但这些input元素将变为查询字符串.

如何form在按下提交按钮时发送它发送的HTTP POST请求正文中的数据?

Bal*_*usC 7

HTTP规范说POST请求可以包含任意数据体.

那是对的.然而,该数据的格式又有几种规格.对于HTML表单,最常用的是application/x-www-form-urlencoded,后跟multipart/form-data.您可以通过enctypeHTML <form>元素的属性进行设置.另请参见第17.13.4节HTML规范的表单内容类型.


HTML表单元素可以POST到URL并且可以包含输入元素,但这些输入元素将变为查询字符串.

这确实是application/x-www-form-urlencoded有效的.请注意,此查询字符串实际上代表整个HTTP请求正文!因此,您似乎认为请求正文绝对不是空的.


我如何获得一个表单,以便在按下提交按钮时发送的HTTP POST请求正文中的数据?

因此它实际上已经这样做了.如果您打算发送表单本身的HTML DOM树表示的副本,如前面的语句中稍微暗示的那样,那么您可以通过JavaScript的一点帮助实现以下目的:

<form onsubmit="this.source.value=this.outerHTML">
    ...
    <input type="hidden" name="source" />
    <input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

然后,表单的整个HTML DOM树表示形式为字符串格式,可用作带名称的请求参数source.


Sam*_*eff 4

使用 javascript 在按下按钮时发送 ajax 请求并取消表单提交。表单提交将始终是名称/值对。XForms 可以发送自定义数据,但如果这是供公共使用的,那么 XForms 要想得到大多数正在使用的浏览器的支持(如果有的话)还需要数年时间。

  • 如果我使用 AJAX 执行 POST,那么浏览器将不会自动处理 HTTP 响应,而我希望它这样做。换句话说,我正在寻找不依赖 JavaScript 而仅依赖 HTML 的问题的答案。 (5认同)