serilize():
$('form').submit(function() {
alert($(this).serialize());
return false;
});
输出标准的查询字符串:
a=1&b=2&c=3&d=4&e=5
serilizeArray():
返回的 JSON 对象是由一个对象数组组成的,其中每个对象包含一个或两个名值对 —— name 参数和 value 参数(如果 value 不为空的话)。举例来说:
[
{name: 'firstname', value: 'Hello'},
{name: 'lastname', value: 'World'},
{name: 'alias'}, // 值为空
]
jQuery有方法$.fn.serialize,可将表单序列化成字符串;有方法$.fn.serializeArray,可将表单序列化成数组,返回 JSON 数据结构数据。。
如果需要其序列化为JSON对象,那么可以基于serializeArray编写方法serializeObject轻松实现:
-
- jQuery.prototype.serializeObject=function(){
- var obj=new Object();
- $.each(this.serializeArray(),function(index,param){
- if(!(param.name in obj)){
- obj[param.name]=param.value;
- }
- });
- return obj;
- };
注:当表单中参数出现同名时,serializeObject会取第一个,而忽略后续的。
设有
- <form>
- <input type="text" name="username" />
- <input type="text" name="password" />
- </form>
则
- jQuery("form").serialize();
- jQuery("form").serializeArray();
- jQuery("form").serializeObject();
+ 此版本不再兼容IE8
+ 修复一个逻辑错误
-
- jQuery.prototype.serializeObject=function(){
- var hasOwnProperty=Object.prototype.hasOwnProperty;
- return this.serializeArray().reduce(function(data,pair){
- if(!hasOwnProperty.call(data,pair.name)){
- data[pair.name]=pair.value;
- }
- return data;
- },{});
- };
+ 减少方法依赖,扩大兼容范围
+ 改用原生循环,提升代码性能
-
- jQuery.prototype.serializeObject=function(){
- var a,o,h,i,e;
- a=this.serializeArray();
- o={};
- h=o.hasOwnProperty;
- for(i=0;i<a.length;i++){
- e=a[i];
- if(!h.call(o,e.name)){
- o[e.name]=e.value;
- }
- }
- return o;
- };