Является ли единственный способ передачи параметров POST в HTML через форму? - PullRequest
24 голосов
/ 28 ноября 2008

В HTML вы можете отправлять данные с одной страницы на другую с помощью запроса GET двумя способами:

http://www.example.com/somepage.php?data=1

... или ...

<form action="somepage.php" method="get">
  <input type="hidden" name="data" value="1" />
  <input type="submit" value="Submit">
</form>

Хотя с запросом POST я видел только данные, отправляемые через элементы формы, такие как:

<form action="somepage.php" method="post">
  <input type="hidden" name="data" value="1" />
  <input type="submit" value="Submit">
</form>

Если у меня есть только один параметр, который я хочу отправить на другую страницу с помощью POST, есть ли более простой способ, чем заключить его в форму?

Ответы [ 5 ]

31 голосов
/ 28 ноября 2008

Есть только два способа POST из браузера - форма или Ajax запрос.

7 голосов
/ 28 ноября 2008

Используя только HTML, форма является единственным способом создания запроса POST. Вы можете использовать серверные сценарии / Javascript для генерации POST-запросов другими способами, но никакие другие способы не работают только с простым HTML.

4 голосов
/ 28 ноября 2008

Как вы уже обнаружили, есть два способа передачи данных по протоколу http: GET или POST. Существует также третий тип HTTP-сообщения, называемый HEAD, но на самом деле он используется только для получения метаданных вокруг ресурса без его загрузки и широко не применяется.

Очевидно, что и GET, и POST легко доступны благодаря использованию тега <form>. GET также легко доступен, если вручную добавить параметры запроса в URL в виде пар имя-значение (foo.html?a=1&b=2).

Однако прелесть и сложность POST в том, что пары имя-значение передаются из браузера на веб-сервер, заключенный в заголовок HTTP-запроса, который не так легко доступен. Единственный способ выполнить POST без использования тега <form> - это вручную изменить заголовок HTTP-запроса и добавить пары имя-значение в себя.

Также имейте в виду, что HTTP-сервер сам по себе не знает, поступил ли запрос (GET или POST) из главного окна браузера или из вызова AJAX. В любом случае, веб-сервер будет читать запрос, расшифровывать, если это запрос GET или POST, искать подходящие пары имя-значение и генерировать ответ.

Если вам нужна дополнительная информация о том, как правильно отформатировать POST запрос, вы можете перейти по адресу jmarshall.com / easy / http / или, возможно, tcpipguide.com / free / t_HTTPRequestMessageFormat .htm . Окончательным ресурсом всегда является W3C , но иногда RFC могут быть ужасно запутанными для нас, простых смертных, читать.

1 голос
/ 28 ноября 2008

В HTML только с формой.

Но вы можете сделать это, если играете со своей серверной стороной. Вот хорошая статья, которая покажет вам, как манипулировать Get, чтобы изменить его на Post через PHP. Это потребует от вас играть с fsockopen ... Этот способ будет использовать ваш параметр? Id = 1 & param = 2 ... и создаст запрос POST на стороне сервера. Вы можете сделать его универсальным, после того, как он настроен, он будет работать, но сначала нужно немного поработать.

0 голосов
/ 28 ноября 2008

Конечно, вы всегда можете выполнить GET для страницы, которая содержит серверную (или AJAX) логику, которая создаст запрос POST (например, GET /pageWhichCreatesAPost.py). Конечно, очень грязно, но могут быть случаи, когда такой обходной путь может оказаться полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...