2011-06-06 99 views
1

我有一個窗體,通過JavaScript添加字段。這是相當容易的存儲沒有一堆額外的JS代碼(用於刪除和重新排序)通過使用字段的排列名稱。如何存儲多維表單數據?

<input type="text" name="product[]" /> 

問題出現在我需要表單數據的多維排列列表時。

order 
    request_date 
    product[] 
    quantity[] 
    warehouse1 
    warehouse2 
    etc... 

基本上,每個訂單都有訂單數據,多個產品,並且每個產品行項目都可以從一個或多個倉庫中提取。如果訂單項的訂單數量爲100,並且第一個選擇倉庫只有50個單位,他們需要選擇第二個倉庫以獲取第二個50個單位...

我想將此全部轉換爲一個頁面可能與JS彈出窗口在不同的倉庫之間進行選擇。

問題是,當我試圖想到一個很好的方式發送這個信息到服務器。

我想使用陣列行項目信息,但無法弄清楚如何將每個行項目的多個倉庫發送回服務器。我應該在隱藏字段中使用逗號分隔值(由JS倉庫選擇彈出框填充)嗎?有沒有更好的辦法?任何建議感激。謝謝。

如果很重要,後端是PHP。

回答

1

爲什麼不使用JSON?在PHP的最後,你會得到嵌套數組的元素數組。

這聽起來像你要麼不知道JSON(並與SO代表3K,我不能相信),或者你不知道你可以將JSON傳遞迴服務器。

但是對於你所描述的,這聽起來像是一種自然而完美的契合。


「粘該數組元素作爲對象到返回值」

var returnObject = { field1: "value", field2: "value" }; 
var buildArray = []; 
$(specificSelector).each(function(){ 
    buildArray.push($(this).data('myKey')); 
}); 
returnObject.field3 = buildArray; 
  • 注意,這裏使用.each這是難看和討厭的。如果你想要速度或清潔,有更好的方法來做到這一點。但是,這工作。
  • 請注意,我還沒有完全測試過,這是我的頭頂,爲概念的示範。
  • 請注意,我假設每個要選擇的對象都有一個與其關聯的.data,關鍵爲'myKey'。你可以改爲查看錶格中的每個單元格,或其他任何單元格。這就是做到這一點,並可能導致臃腫的網頁。但是,當我追加一行時,我將值附加爲對象,以便我可以更快地完成此類操作(輸入的速度更快)
+0

我就不做了很多深入的JS的。這意味着我需要抓取表單數據,將其格式化爲JSON,並通過AJAX發送? – dqhendricks 2011-06-06 23:54:50

+1

@dqhendricks你可以序列化它 - 參見** [.serialize()](http://api.jquery.com/serialize/)** – Tadeck 2011-06-07 01:46:35

+0

@Tadeck序列化它將創建一個URL字符串。這仍然存在不易擁有多維陣列服務器端的原始問題。 – dqhendricks 2011-06-07 16:26:07

-1

您可以對所有倉庫使用多選框。如果您還需要指定每個倉庫有多少個單位,那麼這不起作用。你可以這樣說:

<select name="order4quantity2warehouse"> 
    <option>Warehouse 1</option> 
    <option>Warehouse 2</option> 
</select> 
<input name="order4quantity2warehouse-quantity" /> 

然後在服務器的大小,你解碼$ _ POST將所有的數據精確到數組。例如,你可以通過循環$ _POST的鍵並確定鍵匹配哪種模式來實現,例如,訂購[數量]數量[數量]倉庫,然後將其插入陣列中的相應位置。

+1

不,不要這樣 - 你可以通過數組傳遞請求,甚至是多維數組。沒有必要用這樣的解決方案使你的生活複雜化。抱歉。 – Tadeck 2011-06-07 01:45:24

1

作爲JSON發回。

order: { 
    request_date: '07/06/2011', 
    products: [ 
    { 
     id: 1, 
     quantity: 3, 
     warehouses: [1] 
    }, 
    { 
     id: 2, 
     quantity: 4, 
     warehouses: [1,2] 
    }, 
    { 
     id: 3, 
     quantity: 5, 
     warehouses: [3] 
    }] 
} 
+0

+1發送這樣的數據應該工作,並且非常乾淨 – Tadeck 2011-06-07 01:43:29

1

嘗試:

<input name="order[product][]" value="" /> 
<input name="order[product][]" value="" /> 
<input name="order[product][]" value="" /> 
etc... 
+0

+1它(通常;))工作 – Tadeck 2011-06-07 01:43:46

相關問題