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


Posted in Javascript onDecember 09, 2010
$.fn.serializeObject = function() { 
var o = {}; 
var a = this.serializeArray(); 
$.each(a, function() { 
if (o[this.name]) { 
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; 
}

这个function对于普通的对象转换是足够的,但是如果出现对象内部又包含子对象的情形就不能支持了。
例如我有这样的一个form表单:
<form id="testform"> 
<input type="text" name="name" value="dummyName" id="name"> 
<input type="text" name="category.id" value="categoryId" id="name"> 
<input type="text" name="category.name" value="categoryName" id="name"> 
</form>

对应到server端上的domain class是这样的:
public class DummyProduct { private DummyCategory category; 
private String name; 
public DummyCategory getCategory() { 
return category; 
} 
public void setCategory(DummyCategory category) { 
this.category = category; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
} 
public class DummyCategory { 
private String id; 
private String name; 
public String getId() { 
return id; 
} 
public void setId(String id) { 
this.id = id; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
}

如果想把表单数据序列化成跟server端domain class匹配的json字符串,就可以使用我下面的这个扩展
/** @serializedParams looks like "prop1=value1&prop2=value2".   
Nested property like 'prop.subprop=value' is also supported **/ 
function paramString2obj (serializedParams) { var obj={}; 
function evalThem (str) { 
var attributeName = str.split("=")[0]; 
var attributeValue = str.split("=")[1]; 
if(!attributeValue){ 
return ; 
} 
var array = attributeName.split("."); 
for (var i = 1; i < array.length; i++) { 
var tmpArray = Array(); 
tmpArray.push("obj"); 
for (var j = 0; j < i; j++) { 
tmpArray.push(array[j]); 
}; 
var evalString = tmpArray.join("."); 
// alert(evalString); 
if(!eval(evalString)){ 
eval(evalString+"={};"); 
} 
}; 
eval("obj."+attributeName+"='"+attributeValue+"';"); 
}; 
var properties = serializedParams.split("&"); 
for (var i = 0; i < properties.length; i++) { 
evalThem(properties[i]); 
}; 
return obj; 
} 
$.fn.form2json = function(){ 
var serializedParams = this.serialize(); 
var obj = paramString2obj(serializedParams); 
return JSON.stringify(obj); 
}

使用起来大概像这个样子:
var json = $("#testform").form2json(); 
alert(json);
Javascript 相关文章推荐
javascript 面向对象编程 function也是类
Sep 17 Javascript
jQuery实现长文字部分显示代码
May 13 Javascript
JavaScript+CSS控制打印格式示例介绍
Jan 07 Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 Javascript
Javascript中的arguments对象
Jun 20 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
JavaScript中利用构造器函数模拟类的方法
Feb 16 Javascript
bootstrap paginator分页前后台用法示例
Jun 17 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
Dec 29 Javascript
浅谈Vue数据绑定的原理
Jan 08 Javascript
jQuery实现的别踩白块小游戏完整示例
Jan 07 jQuery
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
Aug 12 Javascript
来自国外的页面JavaScript文件优化
Dec 08 #Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
Dec 08 #Javascript
javascript中callee与caller的用法和应用场景
Dec 08 #Javascript
js下通过prototype扩展实现indexOf的代码
Dec 08 #Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 #Javascript
jquery蒙版控件实现代码
Dec 08 #Javascript
基于JQuery制作的产品广告效果
Dec 08 #Javascript
You might like
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
python实现人人网登录示例分享
2014/01/19 Python
Python中的zipfile模块使用详解
2015/06/25 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
python3 logging日志封装实例
2020/04/08 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
查询优化的一般准则有哪些
2015/03/08 面试题
运动会100米解说词
2014/01/23 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
销售口号大全
2014/06/11 职场文书
2015年测量员工作总结
2015/05/23 职场文书
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB