如何将jQuery.serialize()数据转换为JSON对象?
当表单包含多个输入数组字段时,是否有更好的解决方案来转换已被jQuery函数serialize()序列化的表单数据。 我希望能够将表单数据转换为JSON对象以重新创建其他一些信息丰富的表格。 所以告诉我一个更好的方法来获取序列化字符串转换为JSON对象。
<form id='sampleform'>
<input name='MyName' type='text' /> // Raf
<!--array input fields below-->
<input name='friendname[]' type='text' /> // Bily
<input name='fiendemail[]' type='text' /> // bily@someemail.com
<!--duplicated fields below to add more friends -->
<input name='friendname[]' type='text' /> // Andy
<input name='fiendemail[]' type='text' /> // Andy@somwhere.com
<input name='friendname[]' type='text' /> // Adam
<input name='fiendemail[]' type='text' /> // Adam@herenthere.com
</form>
用于获取数据的jquery方法
var MyForm = $("#sampleform").serialize();
/** result : MyName=Raf&friendname[]=Billy&fiendemail[]=bily@someemail.com&friendname[]=Andy&fiendemail[]=Andy@somwhere.com&friendname[]=Adam&fiendemail[]=Adam@herenthere.com
*/
如何将这些数据放入JSON对象? 它应该具有以下示例来自上述表单的示例JSON数据。
{
"MyName":"raf",
"friendname":[
{"0":"Bily"},
{"1":"Andy"},
{"2":"Adam"}
],
"friendemail":[
{"0":"bily@someemail.com"},
{"1":"Andy@somwhere.com"},
{"2":"Adam@herenthere.com"}
]
}
var formdata = $("#myform").serializeArray();
var data = {};
$(formdata ).each(function(index, obj){
data[obj.name] = obj.value;
});
简单而快速;)
我最近有这个确切的问题。 最初,我们使用jQuery的serializeArray()
方法,但不包括被禁用的表单元素。 我们经常会禁用与页面上其他来源“同步”的表单元素,但我们仍然需要将数据包含在序列化对象中。 所以serializeArray()
就出来了。 我们使用:input
选择器来获取给定容器中的所有输入元素(包括enabled和disabled),然后使用$.map()
来创建我们的对象。
var inputs = $("#container :input");
var obj = $.map(inputs, function(n, i)
{
var o = {};
o[n.name] = $(n).val();
return o;
});
console.log(obj);
请注意,为了达到这个目的,每个输入都需要一个name
属性,该name
属性将是结果对象的属性名称。
这实际上与我们使用的稍有不同。 我们需要创建一个结构为.NET IDictionary的对象,所以我们使用了这个:(我在这里提供它以防万一它有用)
var obj = $.map(inputs, function(n, i)
{
return { Key: n.name, Value: $(n).val() };
});
console.log(obj);
我喜欢这两种解决方案,因为它们是$.map()
函数的简单用法,并且您可以完全控制选择器(所以,最终包含在最终对象中的元素)。 另外,不需要额外的插件。 普通的旧jQuery。
使用jQuery.serializeJSON插件。 它使用与您在Rails params对象中找到的格式相同的格式来转换表单,这是非常标准且经过良好测试的。
链接地址: http://www.djcxy.com/p/8073.html