是否需要HTML用户代理以特定顺序提交表单数据?

Dan*_*ien 4 html forms web-standards

对于给定的HTML表单,是否需要以特定顺序构建提交请求的用户代理?

我正在查看HTML 4.0.1规范,它似乎没有指定"成功控件"成为提交请求的一部分的顺序.第17.13.3节,处理表格数据,状态:

当用户提交表单时(例如,通过激活提交按钮),用户代理如下处理它.

第一步:确定成功的控制

第二步:构建表单数据集

形式的数据集是序列控制名称/电流值从成功控制构造对

第三步:对表单数据集进行编码

然后根据元素enctype属性指定的内容类型对表单数据集进行编码FORM.

第四步:提交编码的表单数据集

在步骤2,表单数据集被描述为序列,因此在步骤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>
Run Code Online (Sandbox Code Playgroud)

表格数据集可以吗?

[("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测试此表单时,似乎都使用深度优先搜索顺序.也许其他浏览器是不同的.问题是这个命令是否在某个地方被规定.

Sir*_*lot 7

如果继续执行HTML规范的17.13.4节,则表明默认内容类型为application/x-www-form-urlencoded.该内容类型的部分说:

控件名称/值按它们在文档中出现的顺序列出.

这将建议深度优先遍历,并且似乎同意您的浏览器测试.