作家
登录

基于jQuery的一个扩展form序列化到json对象

作者: 来源:www.28hudong.com 2013-03-30 01:06:44 阅读 我要评论

复制代码 代码如下: $.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(JS) 压缩 / 混淆 / 格式化 批处理工具

昨天分享了 http://jscompress.sinaapp.com/ 这个小工具后,发现大家还是很喜爱的。 因此今天我把它json化了.用json传输数据,也开放了api 本工具所有的功能实现都是由 http://jscompress.sinaapp.com/api 处理>>>详细阅读


本文标题:基于jQuery的一个扩展form序列化到json对象

地址:http://www.17bianji.com/kaifa2/JS/25216.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)