基于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 相关文章推荐
XmlUtils JS操作XML工具类
Oct 01 Javascript
Jquery 设置标题的自动翻转
Oct 03 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
Nov 21 Javascript
jquery中animate动画积累的解决方法
Oct 05 Javascript
js监听鼠标事件控制textarea输入字符串的个数
Sep 29 Javascript
js+css实现上下翻页相册代码分享
Aug 18 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
Aug 31 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
canvas绘制多边形
Feb 24 Javascript
Nginx 配置多站点vhost 的方法
Jan 07 Javascript
Vue 自定义指令功能完整实例
Sep 17 Javascript
Vue实现移动端拖拽交换位置
Jul 29 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下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
jquery实现手风琴效果实例代码
2013/11/15 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
自我鉴定的范文
2013/10/03 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
高三自我评价
2014/02/01 职场文书
《匆匆》教学反思
2014/02/22 职场文书
行政主管职责范本
2014/03/07 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
丧事答谢词
2015/01/05 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS