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

时间:2010-06-04 02:19:50

标签: html http http-post html-form

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

HTML form元素可以POST到网址,可能包含input元素,但这些input元素会变成查询字符串。

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

2 个答案:

答案 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>