【发布时间】:2023-03-25 07:34:01
【问题描述】:
我正在处理一些遗留的 HTML/JavaScript。有些是我可以控制的,有些是从我无法控制的地方生成的。
有一个带有隐藏字段的动态生成的表单。表单本身是通过 Velocity 模板 (Percussion Rhythmyx CMS) 生成的,JavaScript 会插入额外的隐藏表单字段。最终结果是使用相同的“名称”属性生成的隐藏表单字段。数据被 POST 到 Java/JSP 服务器端代码,我对此知之甚少。
我知道共享相同“名称”属性的表单字段是有效的。由于某种原因,POST 的数据未被后端识别。 当我检查 POST 字符串时,same-name-keys 都不包含任何数据。
如果我在我的开发环境中操作代码,使得给定名称只存在一个输入字段,则数据将正确发布到后端。问题并不一致,有时,它工作得很好。
我能做些什么来保证数据会被发布吗?谁能想到它不会的原因?
I should really update my answer and post code here, because POST requests without
variable strings indicates the problem is on the client side.
【问题讨论】:
-
如果它真的只是一个简单的表单 POST,那么除非 JavaScript 代码禁用输入,否则它们会被发布。您可以使用 TamperData 之类的 Firefox 插件从浏览器的角度查看实际的 HTTP 请求。
-
当您使用 POST 方法提交表单时,将使用项目的“名称”属性指定的变量名称传递字段。如果两个项目具有相同的名称,它们会尝试将数据存储在同一个变量中,因此数据将被重新分配。就像你做
item1 = 'hello'; item1 = 'world';...最后一样,item1 将是“世界”。在您的情况下,变量的最后一个赋值可能是一个空白值。 -
@Travesty3 这完全取决于服务器代码。他说这里的服务器代码是Java/JSP,当有重复的参数名时,Java运行时会提供一个array的值。这些值不会被“重新分配”。
-
您究竟是如何“检查” POST 数据的?
-
@Pointy:抱歉,不熟悉 JSP 的工作原理。我更像是一个 PHP 人,所以我认为它是一样的。
标签: javascript html jsp mootools