19

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

HTMLform元素可以 POST 到 URL 并且可能包含input元素,但这些input元素会变成查询字符串。

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

4

2 回答 2

7

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

这是正确的。然而,该数据的格式又存在几种规范。对于 HTML 表单,最常用的是application/x-www-form-urlencoded,其次是multipart/form-data. 您可以通过enctypeHTML<form>元素的属性进行设置。另请参阅HTML 规范的第17.13.4 章表单内容类型


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>

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

于 2013-10-05T02:12:28.480 回答
4

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

于 2010-06-04T02:35:13.003 回答