HTTP规范说POST请求可以包含任意数据体。
HTML form
元素可以POST到网址,可能包含input
元素,但这些input
元素会变成查询字符串。
如何让form
同时发送按下提交按钮时发送的HTTP POST请求正文中的数据?
答案 0 :(得分:7)
HTTP规范说POST请求可以包含任意数据体。
这是对的。然而,该数据的格式又有几种规格。对于HTML表单,最常用的是application/x-www-form-urlencoded
,后跟multipart/form-data
。您可以通过HTML enctype
元素的<form>
属性进行设置。另请参阅HTML规范的17.13.4 Form Content Types章节。
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树表示形式为字符串格式,可用作名称为source
的请求参数。
答案 1 :(得分:4)
按下按钮时使用javascript发送ajax请求并取消表单提交。表单提交将始终是名称/值对。 XForms可以发送自定义数据,但如果这是供公众使用的话,那么在使用的大多数浏览器支持XForms之前还需要几年时间。(/ p>