Jquery 格式化序列化数组
jQuery.serializeArray当前返回此结果:Jquery 格式化序列化数组,jquery,Jquery,jQuery.serializeArray当前返回此结果: [Object { name="id", value="0"}, Object { name="gender[]", value="1"}, Object { name="gender[]", value="2"}, Object { name="countries[]", value="AU"}, Object { name="countries[]", value="GB"}, Object { name="ages[]"
[Object { name="id", value="0"}, Object { name="gender[]", value="1"}, Object { name="gender[]", value="2"}, Object { name="countries[]", value="AU"}, Object { name="countries[]", value="GB"}, Object { name="ages[]", value="25"}, Object { name="ages[]", value="99"}]
我希望通过以下方式将结果格式化:
{id: 0, gender: ['1', '2'], countries: ['AU', 'GB'], ages: ['25', '99']}
如何做到这一点
我不喜欢序列化数组格式化其输出的方式,我创建了一个函数,该函数以更可接受的方式格式化它
(function( $ ){
$.fn.serializeJSON=function() {
var json = {}, propname;
$.each($(this).serializeArray(), function(index, n){
propname = n.name.replace('[]', '');
if (!json.hasOwnProperty(propname))
{
json[propname] = n.value;
}
else if( ! (json[propname] instanceof Array) )
{
json[propname] = new Array(json[propname], n.value);
}
else
{
json[propname].push(n.value);
}
});
return json;
};
})(jQuery);
创建表单后,只需将此代码放在某个地方:
$('#form_id').submit(function(e) {
e.preventDefault();
e.stopPropagation();
var data = $(this).serializeJSON();
console.log(data);
})
我希望它能帮助那些喜欢表单如何发布到PHP的人。我使用以下方法:
$.fn.serializeObject = function(options) {
options = $.extend({}, options);
var self = this,
json = {},
push_counters = {},
patterns = {
"validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
"key": /[a-zA-Z0-9_\sąćęłóśżźĄĆĘŁÓŚŻŹ\/-]+|(?=\[\])/g,
"push": /^$/,
"fixed": /^\d+$/,
"named": /^[a-zA-Z0-9_]+$/
};
this.build = function(base, key, value){
base[key] = value;
return base;
};
this.push_counter = function(key){
if(push_counters[key] === undefined){
push_counters[key] = 0;
}
return push_counters[key]++;
};
$.each($(this).serializeArray(), function(){
var k,
keys = this.name.match(patterns.key),
merge = this.value,
reverse_key = this.name;
while((k = keys.pop()) !== undefined){
reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');
merge = self.build({}, k, merge);
}
json = $.extend(true, json, merge);
});
return json;
};
如果这不是一个问题,它就不属于这里。但是,你可以将问题表述为问题,并提供解决方案作为答案。FWIW,因为函数
serializeJSON
实际上并没有返回JSON,所以我会将其重命名为更合适的名称。我倾向于在某种程度上同意Felix的观点,但同样地,这个手势是一个深思熟虑的手势,所以+1。OP,如果你可以调整为问题答案,那将是伟大的。输出示例,它是如何格式化当前与您的自定义函数如何格式化它,将使我们更容易理解这个问题…感谢这一点。为我节省了几分钟:)我想知道为什么jQuery的serializeArray没有将收获的表单元素转换为更能立即解析javascriptside和serverside的元素?