我有具有相同名称的子元素,但它们位于不同的父节点下,它们本身以 HTML 形式具有不同的名称。当我提交此表单时,我将如何从服务器端的 HttpRequest 对象访问这些子属性值?
澄清:
实际上,我有许多克隆的 div,它们有多个输入字段。div 有不同的名称,但输入字段的 ID 在这些 div 中是相同的。我在想,如果我可以在服务器端使用父 div id 以某种方式区分子名称,那会容易得多。否则,我将不得不添加额外的 javascript 代码来重命名这些子节点,以便它们会有所不同。
我有具有相同名称的子元素,但它们位于不同的父节点下,它们本身以 HTML 形式具有不同的名称。当我提交此表单时,我将如何从服务器端的 HttpRequest 对象访问这些子属性值?
澄清:
实际上,我有许多克隆的 div,它们有多个输入字段。div 有不同的名称,但输入字段的 ID 在这些 div 中是相同的。我在想,如果我可以在服务器端使用父 div id 以某种方式区分子名称,那会容易得多。否则,我将不得不添加额外的 javascript 代码来重命名这些子节点,以便它们会有所不同。
如果您使用 HTTP 请求发送表单,则仅发送命名元素值(而不是 HTML DOM),而后者会更早覆盖。所以使用不同的名称。
您可以使用随机名称管理器之类的东西。如果你有这样的表格
<form id="test">
<input name="foo"/>
<input name="bar"/>
<input name="foo"/>
<input type="submit"/>
</form>
您可以在发送表单之前为每个变量添加随机后缀
<script>
var mangled = false;
document.getElementById("test").onsubmit = function(e) {
// add suffix on first submit
if(!mangled) for(var i=0; i<this.length; ++i) {
this[i].name+= "_"+Math.floor(Math.random()*99999);
}
mangled = true;
e.preventDefault(); // disable default submit
// send form using XHR
var xhr = new XMLHttpRequest();
xhr.open("POST","yourserver",true);
xhr.send(new FormData(this)); // send the form data to the server
}
</script>
服务器将收到如下信息:
foo_88428=a&bar_69516=b&foo_84602=c
在服务器上,您可以删除_[number]
每个变量的后缀并以您喜欢的方式处理重复项。
上面的字符串是原始帖子数据(谷歌它以获得您的服务器语言支持)。从技术上讲,如果某个名称被插入两次,您可以处理数据,例如
foo=a&bar=b&foo=c
但我不推荐它,因为它是种族危险的反模式。