【发布时间】:2017-03-31 22:17:45
【问题描述】:
我已经尝试解决这个问题好几天了,这让我发疯了。我有一些需要通过 Ajax 提交的数据。它是动态的,所以我不知道它有多少个字段。最重要的是,字段的名称是多维的,也是动态的。例如,一个可能有名称为 data[name] 和 data[title] 的输入,而另一个较大的输入可能有 data[images][0][src]、data[images][0][alt]、data[images][0][description]、data[images][1][src]、data[images][1][alt]、data[images][1][description],但数量未知数组中的元素。我的问题是我需要获取一个可以通过 Ajax 提交的对象,同时保持数据的结构。
我已经尝试对数据进行序列化,但只是得到了一串name = value。我也尝试过序列化数组,但这只是给了我一个[name, value] 的数组。我已经设法使用正则表达式手动生成对象以将其拆分,但我找不到将结果对象合并在一起的方法。我的代码的最新版本是:
$('.modal-content').find('input[name^="data"]').each(function () {
var found = $(this).attr('name').match(re).reverse();
var temp = $(this).val();
$.each(found, function ()
{
str = this.substr(1, this.length - 2);
var t = {};
t[str] = temp;
temp = t;
});
data = $.each({}, data, temp);
});
不幸的是,它没有合并它们,它用 temp 中的内容覆盖了 data 中的内容。如果 data 有 data.images[0].src = "mysrc" 而 temp 有 data.images[0].alt = "myalt" 那么我最终会得到 data.images[0].alt = "myalt" 并且 src 不再存在。
必须有一个简单的方法来做到这一点,在这一点上我什至会采取一种复杂的方式来做到这一点。有人可以帮我解决这个问题吗?
【问题讨论】:
-
HTML 本身是什么样的?它是动态的,但它是否完全遵循固定模式?
-
@RoryMcCrossan 唯一的共同因素是它们在一个带有 ID 的 div 中,并且它们都遵循
name="data[x][y][z]模式,其中 xyz 是动态的,并且存在未知数量的段。有些将是文本输入,其他单选按钮,一些选择和其他文本区域(我知道我只是在输入 atm,一旦为输入工作就会调整代码) -
实际的 HTML 很长,所以我在这里粘贴了迄今为止最复杂的版本 - pasted.co/0643034a
-
您需要生成的 JSON 是什么样子的?
-
你不能做一个数组,其中每个位置都有一个格式为
{str: temp}的对象吗?
标签: javascript jquery multidimensional-array