【问题标题】:Are HTML user agents required to submit form data in a particular order?HTML 用户代理是否需要以特定顺序提交表单数据?
【发布时间】:2011-12-31 23:23:43
【问题描述】:

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

我正在查看 HTML 4.0.1 规范,它似乎没有指定“成功控制”成为提交请求的一部分的顺序。 Section 17.13.3,处理表单数据,状态:

当用户提交表单时(例如,通过激活提交按钮),用户代理会按如下方式对其进行处理。

第一步:识别successful controls

第二步:构建表单数据集

表单数据集是由成功的控件构造而成的control-name/current-value 对序列

第三步:编码表单数据集

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

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

在第二步,表单数据集被描述为一个序列,所以它在第三步的编码顺序大概是固定的。但是,这引出了表单数据集中成功控件的顺序是什么的问题。

例如,给定以下 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", @ 987654337@)]

(即 DOM 的深度优先搜索);或

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

(广度优先搜索);或者甚至是由于在随机哈希表中迭代控制名称/当前值对而产生的不确定顺序?

用 IE 9 和 Firefox 9.0.1 测试这个表单,似乎都使用深度优先搜索顺序。也许其他浏览器不同。问题是这个命令是否是在某个地方规定的。

【问题讨论】:

  • 不要认为他们必须遵循的顺序。

标签: html forms web-standards


【解决方案1】:

如果您继续查看17.13.4 of the HTML spec 部分,则说明默认内容类型为application/x-www-form-urlencoded。该内容类型的部分说:

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

这表明深度优先遍历,并且似乎与您的浏览器测试一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 2011-07-23
    • 2022-01-09
    • 2013-03-05
    相关资源
    最近更新 更多