Обязаны ли пользовательские агенты HTML отправлять данные формы в определенном порядке? - PullRequest
4 голосов
/ 01 января 2012

Требуется ли агенту пользователя для создания запроса на отправку в определенном порядке для данной формы HTML?

Я просматривал спецификацию HTML 4.0.1 и, похоже, не указывает порядокчто "успешные средства управления" становятся частью запроса о представлении. Раздел 17.13.3 , Обработка данных формы, состояния:

Когда пользователь отправляет форму (например, активируя кнопку отправки), пользовательский агент обрабатывает ее следующим образом.

Шаг первый: определение успешных элементов управления

Шаг второй: создание набора данных формы

A набор данных формы - это последовательность control-name / current-value пар, построенных из успешных элементов управления

Шаг третий: Кодировать набор данных формы

Затем набор данных формы кодируется в соответствии с типом содержимого, указанным атрибутом enctype элемента FORM.

Шаг четвертый: Отправьте кодированный набор данных формы

На втором шаге набор данных формы описывается как последовательность , поэтому порядок, в котором он кодируется вШаг 3 предположительно зафиксирован.Но возникает вопрос о том, каков порядок успешных элементов управления в наборе данных формы.

Например, учитывая следующую HTML-форму:

<form action="#" method="GET">
<input type="hidden" name="key1" value="value1" />
<div>
    <div>
        <input type="hidden" name="key2" value="value2" />
    </div>
    <input type="hidden" name="key3" value="value3" />
    <input type="submit" name="submit" value="Submit" />
</div>
<input type="hidden" name="key5" value="value5" />
</form>

Может ли набор данных формы быть

[("key1", "value1"), ("key2", "value2"), ("key3", "value3"), ("submit", "Submit"),("key5", "value5")]

(т. Е. Поиск DOM в глубину);или

[("key1", "value1"), ("key5", "value5"), ("key3", "value3"), ("submit", "Submit"), ("key2", "value2")]

(поиск в ширину);или даже недетерминированный порядок, полученный в результате итерации пар имя элемента управления / текущее значение в рандомизированной хэш-таблице?

При тестировании этой формы с IE 9 и Firefox 9.0.1 кажется, что оба используют поиск в глубинупорядок.Возможно, другие браузеры отличаются.Вопрос в том, прописан ли этот порядок где-то.

1 Ответ

7 голосов
/ 01 января 2012

Если вы продолжите раздел 17.13.4 спецификации HTML , в нем будет указано, что тип содержимого по умолчанию - application/x-www-form-urlencoded.Раздел для этого типа контента гласит:

Имена / значения элементов управления перечислены в порядке их появления в документе .

Это будетпредложить обход в глубину и, похоже, согласуется с тестами вашего браузера.

...