我一直试图解决这个问题,现在已经有好几天了,这让我感到非常紧张。我有一些需要由Ajax提交的数据。它是动态的,所以我不知道它有多少个字段。最重要的是,这些字段的名称是多维的,也是动态的。例如,一个可能具有与所述名称和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提交的对象,同时保持数据的结构。将多维输入转换为JavaScript对象
我试着序列化数据,但只是想出了一串name = value
。我也尝试了serialise数组,但这只是给了我一个[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);
});
遗憾的是它并没有将它们合并,它将覆盖什么是什么是临时数据。如果数据有data.images[0].src = "mysrc"
和临时有data.images[0].alt = "myalt"
然后我只是最终data.images[0].alt = "myalt"
和src不再存在。
必须有一个简单的方法来做到这一点,地狱在这一点上,我甚至会采取复杂的方式来做到这一点。有人可以帮助我吗?
HTML本身是什么样的?它是动态的,但它是否遵循一个设定的模式? –
@RoryMcCrossan唯一的共同因素是它们在一个带有ID的div中,并且它们都遵循模式'name =“data [x] [y] [z]',其中xyz是动态的,并且存在未知数其中一些是文本输入,另一些是单选按钮,一些选择和其他文本区域(我知道我只是在输入atm,一旦输入时会调整代码) – Styphon
实际的HTML非常长,所以我已经粘贴了目前为止我所使用的最复杂版本的副本 - http://pasted.co/0643034a – Styphon