汇盛国际:基于jQuery的一个扩展form序列化到json对

时间: 作者:段划

  

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

   代码如下:
  
$.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表单:  
代码如下:

  
  
  
  
  
  
  
对应到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);  

(责任编辑:admin)

推荐图片Related

相关文章Related

查看更多热门新闻


首页 | 特效插件 | 常用代码 | 样式素材 | 脚本代码 | css特效

Copyright © 2017-2018 汇盛国际 版权所有

系统要求:本站自适应各终端浏览器分辨率

请使用Google、Firefox、IE9、百度浏览器登录网站

网站地图 | RSS订阅 | 汇盛国际平台