Как отправить данные в тело запроса HTTP при использовании HTML-формы?

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

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

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

Ответы

Ответ 1

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

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


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

Именно так работает application/x-www-form-urlencoded. Обратите внимание, что эта строка запроса фактически представляет весь объект запроса HTTP! Таким образом, тело запроса определенно не пустое, как вы думаете.


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

Таким образом, на самом деле это уже делается. Если вы намерены отправить копию представления дерева DOM HTML самой формы, как это было несколько намечено в предыдущем заявлении, вы можете добиться этого с небольшой помощью JavaScript следующим образом:

<form onsubmit="this.source.value=this.outerHTML">
    ...
    <input type="hidden" name="source" />
    <input type="submit" />
</form>

Все представление дерева DOM в формате HTML в формате строки доступно в виде параметра запроса с именем source.

Ответ 2

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