2011-06-06 58 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

相关问题