序列化表单数据$("form").serializeArray()
在做一个后台管理系统类似的项目中发现不能直接取得表单中的数值,于是想到先将表单数据转化为json,然后再用js从json中获取数据,那不就简单了吗?
于是我用了jquery的serializeArray()方法。当然结果转化出的数据是这样的
[ {name: 'type', value: '2'}, {name: 'm_id', value: 'shires'}, {name: 'rwflId',value:'5'} ... ]
这不是我想要的json数组,于是只需要将这个数组中的name和value去掉就可以了,就有了下面两种方法:
第一种:
var data = {}; $("form").serializeArray().map(function(x){ if (data[x.name] !== undefined) { if (!data[x.name].push) { data[x.name] = [data[x.name]]; } data[x.name].push(x.value || ''); } else { data[x.name] = x.value || ''; } });
第二种:
$.fn.serializeObject = function(){ var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name] !== undefined) { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }
其实原理都是一样的,只是遍历方式一个采用map,而一个采用each。
以上。