Как отправить данные в теле HTTP-запроса при использовании HTML-формы? - PullRequest
17 голосов
/ 04 июня 2010

В спецификации HTTP говорится, что запрос POST может содержать произвольный массив данных.

Элемент HTML form может отправить POST в URL и может содержать элементы input, но эти элементы input превращаются в строку запроса.

Как я могу получить form для отправки данных в теле HTTP-запроса POST, отправляемого при нажатии кнопки отправки?

Ответы [ 2 ]

7 голосов
/ 05 октября 2013

В спецификации HTTP говорится, что запрос POST может содержать произвольный массив данных.

Это верно. Однако, в свою очередь, существует несколько спецификаций формата этих данных. В случае HTML-форм чаще всего используется application/x-www-form-urlencoded, за которым следует multipart/form-data. Вы можете установить его с помощью атрибута enctype элемента HTML <form>. См. Также главу 17.13.4 Типы содержимого формы спецификации HTML.


Элемент формы HTML может отправлять 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.

4 голосов
/ 04 июня 2010

Используйте javascript для отправки ajax-запроса при нажатии кнопки и отмены отправки формы. Отправка формы всегда будет парой имя / значение. XForms могут отправлять пользовательские данные, но если они предназначены для публичного использования, пройдет много лет, прежде чем XForms будет поддерживаться большинством используемых браузеров, если вообще когда-либо.

...