我有一个表单,其中通过JavaScript添加字段。通过使用字段的数组名称,这很容易存储,而无需一堆额外的JS代码(用于删除和重新排序)。

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


当我需要表单数据的多维数组列表时,问题就来了。

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


基本上,每个订单都有订单数据,多个产品,并且每个产品线项目都可以从一个或多个仓库中提取。如果订单项的订单数量为100,并且首选仓库只有50个单位,则他们需要选择一个辅助仓库才能从中获取第二个50个单位...

我正在尝试通过JS弹出窗口将所有内容都放在一个页面上,以便在不同的仓库之间进行选择。

问题是,当我尝试想到一种将此信息发送到服务器的好方法时。

我想使用排列的订单项信息,但无法弄清楚如何将每个订单项的多个仓库发送回服务器。我是否应该在隐藏字段(由JS仓库选择弹出窗口填充)中执行类似逗号分隔值的操作?有没有更好的办法?任何建议表示赞赏。谢谢。

如果重要,则后端为PHP。

最佳答案

为什么不使用JSON?在PHP端,您将获得一个用于嵌套数组的元素数组。

在我看来,您要么不了解JSON(并且我不相信3k的SO代表),要么您不知道可以将JSON传递回服务器。

但是对于您所描述的,听起来像是自然而完美的契合。



“将数组元素作为对象粘贴到返回值上”

var returnObject = { field1: "value", field2: "value" };
var buildArray = [];
$(specificSelector).each(function(){
  buildArray.push($(this).data('myKey'));
});
returnObject.field3 = buildArray;



请注意,这使用了丑陋且令人讨厌的.each。如果您想要速度或清洁度,则有更好的方法来执行此操作。但这有效。
请注意,我还没有对它进行充分的测试,这是我的头等大事,只是为了演示概念。
请注意,我假设要选择的每个对象都有与之关联的键.data'myKey'。您可以改为遍历表中的每个单元格,或其他任何内容。这就是我的操作方式,并且可能导致页面膨胀。但是,当我追加一行时,我会将值附加为对象,因此可以更快地执行此操作(更快地键入内容)

09-07 11:29