HTTP 规范说 POST 请求可以包含任意数据体。
HTMLform
元素可以 POST 到 URL 并且可能包含input
元素,但这些input
元素会变成查询字符串。
我如何才能form
在按下提交按钮时发送的 HTTP POST 请求正文中也发送数据?
HTTP 规范说 POST 请求可以包含任意数据体。
这是正确的。然而,该数据的格式又存在几种规范。对于 HTML 表单,最常用的是application/x-www-form-urlencoded
,其次是multipart/form-data
. 您可以通过enctype
HTML<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
。
按下按钮时使用javascript发送ajax请求并取消表单提交。表单提交将始终是名称/值对。XForms 可以发送定制的数据,但如果这是供公众使用的,那么 XForms 还需要数年时间才能被大多数使用中的浏览器支持(如果有的话)。