基于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 相关文章推荐
jQuery 图像裁剪插件Jcrop的简单使用
May 22 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
js获取IP地址的方法小结
Jul 01 Javascript
javascript递归回溯法解八皇后问题
Apr 22 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
深入理解关于javascript中apply()和call()方法的区别
Apr 12 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
利用jQuery实现打字机字幕效果实例代码
Sep 02 Javascript
Bootstrap笔记之缩略图、警告框实例详解
Mar 09 Javascript
Vue.js 中的 $watch使用方法
May 25 Javascript
AngularJS实现select的ng-options功能示例
Jul 12 Javascript
函数式编程入门实践(一)
Apr 20 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 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
PHP实现搜索相似图片
2015/09/22 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
python利用正则表达式提取字符串
2016/12/08 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
集团公司总经理岗位职责
2013/12/20 职场文书
自我鉴定四大框架
2014/01/17 职场文书
学员自我鉴定
2014/03/19 职场文书
培训班主持词
2014/03/28 职场文书
分家协议书
2014/04/21 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
践行三严三实心得体会
2014/10/13 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python