2017-07-11 37 views
0

假設我有一個表單,它具有一些相互關聯的輸入。據說我運行一個披薩店,用戶通過披薩訂單提交表單。每份比薩餅訂單都有一組輸入,指的是訂單:type,option1option2。如果客戶想要更多比薩餅,他們可以添加另一組形式輸入。下面的代碼模擬訂購2個比薩餅:javascript/jquery ajax:具有相同名稱屬性的輸入會發生什麼

<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. 服務器是否會「知道」 [默認],這些投入是分組的,它們代表兩個命令?這是否與serializeArray()一起?我在問,因爲在網絡提交時,我看到的只是名稱和值對。

  2. 如果不是,在客戶端(如果有)處理這些類型的分組表單的最好方法是什麼,以便奶酪怪物得到他/她的修復?

+1

你應該像'比薩餅創建的所有字段的數組[]','選項1 []'等... –

回答

1

服務器是否會「知道」 [默認],這些輸入進行分組,它們代表了兩個訂單?這是'serializeArray()'來的嗎?我在問,因爲在網絡提交時,我看到的只是名稱和值對。

這完全取決於服務器和您在發送數據的格式上。例如,在PHP中你將需要追加[]到字段名的末尾對它們進行整理。在C#MVC中,您需要將模型定義爲每個項目具有List<string>屬性,或者更好的是List<Pizza>,並將匹薩作爲整個實體進行綁定。

如果不是,在客戶端(如果有)處理這些類型的分組表單的最好方法是什麼,以便奶酪怪物得到他/她的修復?

如上描述的擴展,這取決於你的服務器端代碼,並且格式也希望你在發送數據。

我知道這可能不是你所希望看到的答案,但只要給出你的問題中的信息就可以提供。一般來說,serializeArray()在發送表單數據時沒有多大幫助。

+0

我要配置列表接收每個輸入組的{pizza:'val',option1:'val',option2:'val'}然後呢? (我使用的是Spring,但是我的問題更一般,因爲我認爲我可以控制客戶端的所有內容 - 構建數據文件 – vzR

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

請注意,這是假定PHP後端.OP未指定。 –

+0

不是更好'.serializeArray()'?我認爲函數'合併'輸入值(並採取最後的),在所有情況下,服務器將不會有所有的值如此.. – pirs

相關問題