javascript / jquery ajax:具有相同名称属性

时间:2017-07-11 10:23:55

标签: javascript jquery ajax forms http

假设我的表单中包含一些相互链接的输入。据说我经营一个披萨店,用户提交一份带有披萨订单的表格。每个披萨订单都有一组引用订单的输入:typeoption1option2。如果客户想要更多的比萨,他们可以添加另一组表单输入。下面的代码模拟了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's serializeArray() ,我有一些不确定因素:

  1. 服务器&#34;知道&#34; [默认]这些输入是否已分组,它们代表两个订单?它是serializeArray()附带的东西吗?我问,因为在网络上提交,我看到的只是名称和价值对。

  2. 如果没有,在客户端(如果有的话)处理这些类型的分组表单的最佳方法是什么,以便奶酪怪物得到他/她的修复?

    < / LI>

2 个答案:

答案 0 :(得分:1)

  

服务器“知道”[默认]这些输入是否已分组,它们代表两个订单?它是'serializeArray()'附带的东西吗?我问,因为在网络上提交,我看到的只是名称和价值对。

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

  

如果没有,在客户端(如果有的话)处理这些类型的分组表单的最佳方法是什么,以便奶酪怪物得到他/她的修复?

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

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

答案 1 :(得分:0)

要完成您的方法,您应该像这样组织表单:

<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>