Что произойдет, если поле действия в <form>имеет параметры? - PullRequest
35 голосов
/ 09 апреля 2009

Есть ли хорошо поддерживаемое, общее поведение, которое я могу ожидать, если я сделаю что-то подобное в HTML:

<form method="get" action="/somePage.html?param1=foo&param2=foo">
  <input name="param2"></input>
  <input name="param3"></input>
</form>

Кажется, что подобные вещи по своей сути нелепы, но я видел, как они использовались здесь и там, и мне было интересно, как на Земле должно быть ожидаемое поведение. Являются ли браузеры достаточно умными, чтобы привязать к действию "& param2 = что угодно, & param3 = что угодно", или они просто добавляют второй знак вопроса? Или что? Есть ли случаи, когда это действительно правильный путь?

Ответы [ 4 ]

55 голосов
/ 09 апреля 2009

Если для атрибута метода установлено значение GET, браузер удаляет параметры строки запроса из атрибута действия перед созданием значений аргумента формы.

Итак, в вашем примере запрос на отправку будет выглядеть так: /somePage.html?param2=value&param3=value

Так что нет, когда метод "GET", как в вашем примере, нет причин делать это.

19 голосов
/ 09 апреля 2009

Не уверен, но я думаю, что лучше размещать эти переменные в скрытых полях ввода. Таким образом, не имеет значения, является ли ваш метод публикации POST или GET.

<form method="get" action="/somePage.html">
  <input name="param2"></input>
  <input name="param3"></input>
  <input type="hidden" name="param1" value="foo" />
  <input type="hidden" name="param2" value="foo" />
</form>
4 голосов
/ 09 апреля 2009

Вы можете изменить атрибут метода в форме на «POST» со скриптом перед отправкой формы, чтобы можно было использовать строку запроса в действии. Хотя вряд ли это лучшее решение для чего-либо.

3 голосов
/ 09 апреля 2009

Ну, все вопросы были даны ответы, кроме последнего, на который ответ да. Для POST это разрешено, но вы можете найти случаи, когда это не работает. Я видел веб-серверы, которые допускают только строку запроса постданных или , поэтому она не надежна.

...