1

我正在尝试将表单序列化为 JSON 对象,以便我可以通过 AJAX 发送数据。我正在使用以下功能:

$.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
        }
    ...
}

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

谢谢你。

4

2 回答 2

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");
            }
        }
});

他们将在参数“obj”中寻址的 servlet 中将 JSON 作为字符串接收。

您可能希望使用com.google.gson在 servlet 中解析它

或者直接获取表单并将其提交给 servlet。

于 2012-08-07T21:00:30.420 回答
0

我认为没有现成的函数可以将 abc 之类的路径转换为嵌套对象。以下线程中介绍了路径设置和获取问题的几种解决方案:

将点符号的 JavaScript 字符串转换为对象引用

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

于 2014-09-17T15:59:25.840 回答