2012-07-18 43 views
1

我想以一种可以通过AJAX发送数据的方式将表单序列化为JSON对象。我正在使用以下功能:用于JSON的Javascript表单序列化

$.fn.serializeObject = function() { 
var arrayData, objectData; 
arrayData = this.serializeArray(); 
objectData = {}; 
$.each(arrayData, function() { 
    var value; 
    if (this.value != null && this.value != '') { 
     value = this.value; 
    } else { 
     value = null; 
    } 
    if (objectData[this.name] != null) { 
     if (!objectData[this.name].push) { 
      objectData[this.name] = [ objectData[this.name] ]; 
     } 

     objectData[this.name].push(value); 
    } else { 
     objectData[this.name] = value; 
    } 
}); 
return objectData; 

};

问题是我的序列化没有考虑循环数据结构。例如我在我的形式

<form:input path="discipline.cnfpDisciplineCode" class="required" /> 

,这被序列化作为

{ 
    ... 
    discipline.cnfpDisciplineCode : someValue 
    ... 
} 

有一种优雅的解决方案,以序列化的形式使它看起来像

{ 
    ... 
    discipline : 
     { 
      cnfpDisciplineCode : someValue 
     } 
    ... 
} 

还是我必须自己实现整个解析算法?

谢谢。

+1

没有内置任何东西;你必须自己做这个。 – Matt 2012-07-18 13:07:07

+0

'如何渲染为HTML? – Chandu 2012-07-18 13:07:46

+0

Andrei 2012-07-18 13:20:47

回答

0

不知道如果我得到了你想做的事情,这里是我在这种情况下使用的东西。

首先,你可以建立一个函数来创建一个对象,并用它发送到服务器jQuery.ajax

$.ajax({ 
     url: "servletAdress", 
     type: "POST", 
     accepts: "application/json", 
     data: {obj: JSON.stringify(object) }, //it can be an array 
     dataType: "json", 
     beforeSend: function(x) { 
      if (x && x.overrideMimeType) { 
       x.overrideMimeType("application/json;charset=UTF-8"); 
      } 
     } 
}); 

他们,你将收到JSON作为在paramether解决这个servlet的String 'OBJ'。

您可能需要使用com.google.gson

在servlet来解析这个或者干脆采取的形式,并提交给servlet。

0

我不认为有一个现成的函数来转换像a.b.c这样的路径为嵌套对象。为路径设置和-getting问题有几种解决方案呈现在以下主题:

Convert JavaScript string in dot notation into an object reference

正如你已经使用Spring(至少看起来是因为标签LIB像你是)你可以自动将输入参数转换成一个对象,如果这是你想要做的。 这个想法是服务器端有一个代表某个状态的对象,像往常一样将这个对象解析为一个表单,并且Spring自己处理从输入参数到POJO的反向转换。在这种情况下,请查看Springs @ModelAttribute注释的一些示例。