基于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 相关文章推荐
JSON 和 JavaScript eval使用说明
Jun 13 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
Sep 21 Javascript
JS 页面计时器示例代码
Oct 28 Javascript
JS倒计时实例_天时分秒
Aug 22 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
Jan 30 Javascript
JavaScript实现的简单加密解密操作示例
Jun 01 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
Jun 19 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
Sep 26 Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
如何在微信小程序中存setStorage
Dec 13 Javascript
JavaScript实现瀑布流布局的3种方式
Dec 27 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判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python将文本转换成图片输出的方法
2015/04/28 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
python基础教程之Filter使用方法
2017/01/17 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python程序退出方式小结
2017/12/09 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
python使用Matplotlib画饼图
2018/09/25 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
求网格中的黑点分布
2013/11/06 面试题
年度考核自我鉴定
2014/03/19 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
项目申请汇报材料
2014/08/16 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python