基于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 相关文章推荐
网页里控制图片大小的相关代码
Jun 25 Javascript
js 使用form表单select类实现级联菜单效果
Dec 19 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
纯javascript实现分页(两种方法)
Aug 26 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
Jan 29 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
详解node服务器中打开html文件的两种方法
Sep 18 Javascript
antd Upload 文件上传的示例代码
Dec 14 Javascript
微信小程序 组件的外部样式externalClasses使用详解
Sep 06 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 Javascript
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
来自国外的页面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生成静态页
2006/11/25 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
摘自启点的main.js
2008/04/20 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
详解Python中的条件判断语句
2015/05/14 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
神经网络python源码分享
2017/12/15 Python
python中的随机函数小结
2018/01/27 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
新浪网技术部笔试题
2016/08/26 面试题
公司出纳岗位职责
2013/12/07 职场文书
总经理助理工作职责
2014/02/06 职场文书
班长自荐书范文
2014/02/11 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技