基于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 detach()后节点中的某个值实现代码
Feb 05 Javascript
JavaScript获取一个范围内日期的方法
Apr 24 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
May 03 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
Jan 04 Javascript
JS实现的简单轮播图运动效果示例
Dec 22 Javascript
Centos6.8下Node.js安装教程
May 12 Javascript
详解各版本React路由的跳转的方法
May 10 Javascript
js+css实现红包雨效果
Jul 12 Javascript
js作用域和作用域链及预解析
Apr 11 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 Javascript
微信小程序实现图片压缩
Dec 03 Javascript
ECharts transform数据转换和dataZoom在项目中使用
Dec 24 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小马小结(方便查找后门的朋友)
2012/05/05 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
yii添删改查实例
2015/11/16 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
django解决跨域请求的问题
2018/11/11 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
python web框架中实现原生分页
2019/09/08 Python
基于python3实现倒叙字符串
2020/02/18 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
致长跑运动员广播稿
2014/01/31 职场文书
社区国庆节活动方案
2014/02/05 职场文书
合作协议书怎么写
2014/04/18 职场文书
初三开学计划书
2014/04/27 职场文书
办理房产过户的委托书
2014/09/14 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
2014年财政工作总结
2014/12/10 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
人与自然的观后感
2015/06/18 职场文书
话题作文之诚信
2019/11/28 职场文书
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle