javascript/jquery-ajax:输入具有相同的name属性时会发生什么

javascript/jquery-ajax:输入具有相同的name属性时会发生什么,javascript,jquery,ajax,forms,http,Javascript,Jquery,Ajax,Forms,Http,假设我有一个表单,它有一些相互链接的输入。据推测,我经营一家比萨饼店,用户在那里提交一份表格和他们的比萨饼订单。每个比萨饼订单都有一组与订单相关的输入:类型、选项1和选项2。如果客户想要更多的比萨饼,他们可以添加另一组表单输入。下面的代码模拟了2个比萨饼的订单: <form action="pizza/get-now.html"> First Pizza: <input type="text" name="pizza" value="quattro stagi

假设我有一个表单,它有一些相互链接的输入。据推测,我经营一家比萨饼店,用户在那里提交一份表格和他们的比萨饼订单。每个比萨饼订单都有一组与订单相关的输入:
类型
选项1
选项2
。如果客户想要更多的比萨饼,他们可以添加另一组表单输入。下面的代码模拟了2个比萨饼的订单:

<form action="pizza/get-now.html">
  First Pizza:
       <input type="text" name="pizza" value="quattro stagioni"><br>
       <input type="text" name="option1" value="extra bacon"><br>
       <input type="text" name="option2 value="no tomatoes"><br>

  Second Pizza:
       <input type="text" name="pizza" value="vegetarian"><br>
       <input type="text" name="option1" value="extra mushrooms"><br>
       <input type="text" name="option2 value="no cheese"><br>


  <button type="submit">Submit</button>
</form>

第一批比萨饼:



提交
如果我使用的是jQuery的serializeArray(),我有一些不确定性:

  • 服务器是否[默认情况下]知道这些输入是分组的,它们代表两个顺序?它是
    serializeArray()
    附带的东西吗?我这样问是因为在网络提交时,我看到的只是名称和值对

  • 如果没有,那么在客户端(如果有的话)处理这些类型的分组表单的最佳方法是什么,以使奶酪怪胎得到解决

  • 服务器是否[默认情况下]知道这些输入是分组的,它们代表两个顺序?是“serializeArray()”附带的功能吗?我这样问是因为在网络提交时,我看到的只是名称和值对

    这完全取决于服务器和发送数据的格式。例如,在PHP中,需要将
    []
    附加到字段名称的末尾,以便对其进行整理。在C#MVC中,您需要将模型定义为每个项目都有一个
    List
    属性,或者更好地定义为
    List
    并将比萨饼绑定为整个实体

    如果没有,那么在客户端(如果有的话)处理这些类型的分组表单的最佳方法是什么,以使奶酪怪胎得到解决

    作为上述描述的扩展,它取决于您的服务器端代码,以及它希望您以何种格式发送数据


    我意识到这可能不是你所希望的答案,但鉴于你问题中的信息,这是你所能提供的一切。但是,一般来说,
    serializeArray()
    在发送表单数据时没有多大帮助。

    要完成您的方法,您应该如下组织表单:

    <form action="pizza/get-now.html">
      First Pizza:
           <input type="text" name="pizza[0]" value="quattro stagioni"><br>
           <input type="text" name="pizza[0][option1]" value="extra bacon"><br>
           <input type="text" name="pizza[0][option2]" value="no tomatoes"><br>
    
      Second Pizza:
           <input type="text" name="pizza[1]" value="vegetarian"><br>
           <input type="text" name="pizza[1][option1]" value="extra mushrooms"><br>
           <input type="text" name="pizza[1][option2]" value="no cheese"><br>
    
    
      <button type="submit">Submit</button>
    </form>
    
    
    第一批比萨饼:
    


    第二批比萨饼:


    提交
    您应该创建所有字段的数组,如
    pizza[]
    option1[]
    等。请注意,这是假设一个PHP后端。OP没有指定。对于
    .serializeArray()
    ,它不是更好吗?我认为函数“合并”输入值(并取最后的值),在任何情况下,服务器都不会拥有所有的值,因此..我必须配置列表,以便为每个输入组接收类似{pizza:'val',option1:'val',option2:'val}的内容,然后呢?(我正在使用Spring,但我的问题更一般,因为我假设在构建数据文件时,我可以从客户端控制一切。)