`
snoopy7713
  • 浏览: 1152662 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

Jquery 将表单序列化为Json对象

阅读更多

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

 

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

Js代码 复制代码 收藏代码
  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. function strToObj(str){
  13. str = str.replace(/&/g, "','" );
  14. str = str.replace(/=/g, "':'" );
  15. str = "({'" +str + "'})" ;
  16. obj = eval(str);
  17. return obj;
  18. }
/** 
     * 重置form表单 
     * @param formId  form的id  
     */  
    function resetQuery(formId){  
        var fid = "#" + formId;  
        var str = $(fid).serialize();  
        //str= cardSelectDate=3&startdate=2012-02-01&enddate=2012-02-04  
        var ob= strToObj(str);  
        alert(ob.startdate);//2012-02-01  
    }  
      
    function strToObj(str){  
        str = str.replace(/&/g,"','");  
        str = str.replace(/=/g,"':'");  
        str = "({'"+str +"'})";  
        obj = eval(str);   
        return obj;  
    }  

个人感觉这样做有bug。

 

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

 

 

下面是表单:

 

Html代码 复制代码 收藏代码
  1. < form id = "myForm" action = "#" >
  2. < input name = "name" />
  3. < input name = "age" />
  4. < input type = "submit" />
  5. </ form >
<form id="myForm" action="#">
	<input name="name"/>
	<input name="age"/>
	<input type="submit"/>
</form>

 

Jquery插件代码如下:

 

Js代码 复制代码 收藏代码
  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);
(function($){
		$.fn.serializeJson=function(){
			var serializeObj={};
			$(this.serializeArray()).each(function(){
				serializeObj[this.name]=this.value;
			});
			return serializeObj;
		};
	})(jQuery);

 

 

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

Js代码 复制代码 收藏代码
  1. e.preventDefault();
  2. console.log($( this ).serializeJson());
  3. });
		e.preventDefault();
		console.log($(this).serializeJson());
	});

测试结果:

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

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

 

 

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

 

Js代码 复制代码 收藏代码
  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);
(function($){
		$.fn.serializeJson=function(){
			var serializeObj={};
			var array=this.serializeArray();
			var str=this.serialize();
			$(array).each(function(){
				if(serializeObj[this.name]){
					if($.isArray(serializeObj[this.name])){
						serializeObj[this.name].push(this.value);
					}else{
						serializeObj[this.name]=[serializeObj[this.name],this.value];
					}
				}else{
					serializeObj[this.name]=this.value;	
				}
			});
			return serializeObj;
		};
	})(jQuery);

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

 

测试如下:

表单:

 

Html代码 复制代码 收藏代码
  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 >
<form id="myForm" action="#">
	<input name="name"/>
	<input name="age"/>
	<select multiple="multiple" name="interest" size="2">
		<option value ="interest1">interest1</option>
		<option value ="interest2">interest2</option>
		<option value="interest3">interest3</option>
		<option value="interest4">interest4</option>
	</select>
	<input type="checkbox" name="vehicle" value="Bike" /> I have a bike
	<input type="checkbox" name="vehicle" value="Car" /> I have a car
	<input type="submit"/>
</form>

测试结果:

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

分享到:
评论

相关推荐

    将表单序列化为json对象

    ### 将表单序列化为JSON对象:深入解析与应用 #### 一、知识点概述 在Web开发中,经常需要处理HTML表单数据,并将其发送到服务器进行进一步处理。传统的做法是通过`form`标签的`submit`事件来提交表单数据,但这种...

    jQuery实现form表单元素序列化为json对象的方法

    本文将深入探讨如何使用jQuery将HTML表单(form)的元素序列化为JSON(JavaScript Object Notation)对象,这是一种轻量级的数据交换格式,常用于前后端数据传输。 首先,我们需要了解jQuery的`serializeArray()`...

    将JavaScript的jQuery库中表单转化为JSON对象的方法

    大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现。   我在网上看到有人用替换的方法,先用serialize序列化后,将&替换...

    jQuery扩展将复杂form表单转成json对象

    在处理HTML表单(form)数据时,jQuery提供了一种便捷的方式将表单数据序列化为JSON对象,这对于前后端数据交换尤其有用。本文将深入探讨如何使用jQuery扩展实现这一功能,并解释相关的核心知识点。 首先,`...

    前端from表单序列化json插件依赖json2 jquery

    from表单序列化json插件 , 插件支持key-value数据的存储 one-many

    jQuery序列化form表单数据为JSON对象的实现方法

    这两个函数通过遍历表单内所有控件,并根据控件类型处理name和value,最终构建出一个对象,该对象将表单中的数据以键值对的形式存储,方便后续处理和使用。 自定义的$.fn.serializeJson函数将序列化后的数组转换成...

    jquery.serializeJSON:将HTML表单序列化为JavaScript对象,支持嵌套的属性和数组

    将方法.serializeJSON()添加到以将表单序列化为JavaScript对象。 支持与Ruby on Rails中使用的嵌套参数相同的格式。 安装 使用bower install jquery.serializeJSON或 npm install jquery-serializejson ,或仅下载...

    jQuery实现form表单序列化转换为json对象功能示例

    jQuery提供了一个方便的方法来序列化表单数据,并将其转换为JSON对象,这在使用Ajax提交表单时特别有用。本文将通过一个示例来讲解如何使用jQuery实现这一功能。 首先,我们需要一个HTML表单,如下所示: ```html ...

    dom-form-serializer:将表单字段序列化为JSON表示形式

    它旨在使将表单字段序列化为简单的JSON对象变得容易。 正在安装 npm install dom-form-serializer 基本用法 连载 var serialize = require ( 'dom-form-serializer' ) . serialize serialize ( document . ...

    php基于jquery的ajax技术传递json数据简单实例.docx

    点击“提交”按钮时,使用 jQuery 的 serialize() 方法将表单数据序列化,并使用 Ajax 将数据传递给 PHP 页面。 jQuery 代码 在 jQuery 代码中,我们使用点击事件来触发 Ajax 请求。当点击“提交”按钮时,我们...

    html对应的文件中 将form 表单数据 转化为json 格式

    jQuery提供了一个方便的插件,叫做`serializeJSON`,它能够将表单数据序列化为JSON对象。首先,确保在项目中引入了jQuery库和`serializeJSON.js`插件: ```html &lt;script src="https://code.jquery....

    json数据序列化和反序列化

    4. HTML页面与JavaScript交互:在HTML页面中,JavaScript可以用来处理用户交互,获取表单数据,然后通过Ajax请求将这些数据序列化为JSON格式发送到服务器。例如,使用jQuery的`$.ajax`方法: ```javascript let ...

    基于jQuery的一个扩展form序列化到json对象

    然而,jQuery作为一个广泛使用的JavaScript库,并没有直接提供将表单序列化为JSON对象的内置方法。尽管如此,开发者社区已经提出了解决方案,使得我们可以借助现有的方法实现这一功能。 首先,来看一下jQuery的...

    jQuery json

    4. **序列化表单数据为JSON**:jQuery提供`serializeArray()`和`serializeObject()`(非官方插件)方法将表单数据转换为JSON格式,便于发送Ajax请求: ```javascript var formData = $('form').serializeArray();...

    jquery将一个表单序列化为一个对象的方法

    本文将详细介绍如何使用jQuery将一个表单序列化为一个对象。 首先,了解什么是表单序列化。在HTML中,表单是由`&lt;form&gt;`元素及其子元素(如`&lt;input&gt;`, `&lt;select&gt;`, `&lt;textarea&gt;`等)组成的,用于收集用户输入的数据...

    jQuery将表单序列化成一个Object对象的实例

    标题提到的"jQuery将表单序列化成一个Object对象的实例",主要涉及到jQuery的`serializeArray()`方法和自定义扩展功能,以适应开发者对于更方便的数据结构的需求。 `serializeArray()`是jQuery提供的一个方法,用于...

Global site tag (gtag.js) - Google Analytics