1

我有具有相同名称的子元素,但它们位于不同的父节点下,它们本身以 HTML 形式具有不同的名称。当我提交此表单时,我将如何从服务器端的 HttpRequest 对象访问这些子属性值?

澄清:

实际上,我有许多克隆的 div,它们有多个输入字段。div 有不同的名称,但输入字段的 ID 在这些 div 中是相同的。我在想,如果我可以在服务器端使用父 div id 以某种方式区分子名称,那会容易得多。否则,我将不得不添加额外的 javascript 代码来重命名这些子节点,以便它们会有所不同。

4

1 回答 1

1

如果您使用 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

但我不推荐它,因为它是种族危险的反模式。

于 2013-06-25T21:22:45.560 回答