Jquery 将表单序列化为Json对象

简介:

大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。

 

我在网上看到有人用替换的方法,先用serialize序列化后,将&替换成“:”、“‘”:

  1. /**  
  2.      * 重置form表单  
  3.      * @param formId  form的id   
  4.      */    
  5.     function resetQuery(formId){    
  6.         var fid = "#" + formId;    
  7.         var str = $(fid).serialize();    
  8.         //str= cardSelectDate=3&startdate=2012-02-01&enddate=2012-02-04    
  9.         var ob= strToObj(str);    
  10.         alert(ob.startdate);//2012-02-01    
  11.     }    
  12.         
  13.     function strToObj(str){    
  14.         str = str.replace(/&/g,"','");    
  15.         str = str.replace(/=/g,"':'");    
  16.         str = "({'"+str +"'})";    
  17.         obj = eval(str);     
  18.         return obj;    
  19.     }    

 个人感觉这样做有bug。

 

我的方法是,先用serializeArray序列化为数组,再封装为Json对象。

 

 

下面是表单:

 

  1. <form id="myForm" action="#">  
  2.     <input name="name"/>  
  3.     <input name="age"/>  
  4.     <input type="submit"/>  
  5. </form>  

 

 Jquery插件代码如下:

 

  1. (function($){  
  2.         $.fn.serializeJson=function(){  
  3.             var serializeObj={};  
  4.             $(this.serializeArray()).each(function(){  
  5.                 serializeObj[this.name]=this.value;  
  6.             });  
  7.             return serializeObj;  
  8.         };  
  9.     })(jQuery);  

 

 

下面测试一下:$("#myForm").bind("submit",function(e){

  1.     e.preventDefault();  
  2.     console.log($(this).serializeJson());  
  3. });  

 测试结果:

输入a,b提交,得到序列化结果

{age: "b",name: "a"}

 

 

上面的插件,不能适用于有多个值的输入控件,例如复选框、多选的select。下面,我将插件做进一步的修改,让其支持多选。代码如下:

 

  1. (function($){  
  2.         $.fn.serializeJson=function(){  
  3.             var serializeObj={};  
  4.             var array=this.serializeArray();  
  5.             var str=this.serialize();  
  6.             $(array).each(function(){  
  7.                 if(serializeObj[this.name]){  
  8.                     if($.isArray(serializeObj[this.name])){  
  9.                         serializeObj[this.name].push(this.value);  
  10.                     }else{  
  11.                         serializeObj[this.name]=[serializeObj[this.name],this.value];  
  12.                     }  
  13.                 }else{  
  14.                     serializeObj[this.name]=this.value;   
  15.                 }  
  16.             });  
  17.             return serializeObj;  
  18.         };  
  19.     })(jQuery);  

 这里,我将多选的值封装为一个数值来进行处理。如果大家使用的时候需要将多选的值封装为“,"连接的字符串或者其他形式,请自行修改相应代码。

 

测试如下:

表单:

 

  1. <form id="myForm" action="#">  
  2.     <input name="name"/>  
  3.     <input name="age"/>  
  4.     <select multiple="multiple" name="interest" size="2">  
  5.         <option value ="interest1">interest1</option>  
  6.         <option value ="interest2">interest2</option>  
  7.         <option value="interest3">interest3</option>  
  8.         <option value="interest4">interest4</option>  
  9.     </select>  
  10.     <input type="checkbox" name="vehicle" value="Bike" /> I have a bike  
  11.     <input type="checkbox" name="vehicle" value="Car" /> I have a car  
  12.     <input type="submit"/>  
  13. </form>  

 测试结果:

{age: "aa",interest: ["interest2", "interest4"],name: "dd",vehicle:["Bike","Car"]}

 

分类:  Jquery

本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4919684.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
缓存 安全 PHP
PHP中的魔术方法与对象序列化
本文将深入探讨PHP中的魔术方法,特别是与对象序列化和反序列化相关的__sleep()和__wakeup()方法。通过实例解析,帮助读者理解如何在实际应用中有效利用这些魔术方法,提高开发效率和代码质量。
|
4月前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
JSON 前端开发 数据格式
前端的全栈之路Meteor篇(五):自定义对象序列化的EJSON介绍 - 跨设备的对象传输
EJSON是Meteor框架中扩展了标准JSON的库,支持更多数据类型如`Date`、`Binary`等。它提供了序列化和反序列化功能,使客户端和服务器之间的复杂数据传输更加便捷高效。EJSON还支持自定义对象的定义和传输,通过`EJSON.addType`注册自定义类型,确保数据在两端无缝传递。
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
2月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
2月前
|
JSON 缓存 NoSQL
Redis 在线查看序列化对象技术详解
Redis 在线查看序列化对象技术详解
37 2
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
33 0
|
2月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
283 7
|
2月前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
93 3