【问题标题】:Javascript form serialization for JSONJSON的Javascript表单序列化
【发布时间】:2012-07-18 13:05:12
【问题描述】:

我正在尝试将表单序列化为 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
        }
    ...
}

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

谢谢。

【问题讨论】:

  • 没有内置任何东西;你必须自己做。
  • &lt;form:input path="discipline.cnfpDisciplineCode" class="required" /&gt; 如何呈现为 HTML?
  • @Chandu,我是Spring framwork taglib。这将生成一个&lt;input name='discipline.cnfpDisciplineCode' class='required' /&gt; html 标记。

标签: javascript jquery ajax json serialization


【解决方案1】:

不确定我是否得到了你想要做的事情,这是我在这种情况下会使用的东西。

首先,您可以构建一个函数来创建一个对象并使用 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。

您可能希望在 servlet 中使用 com.google.gson 对其进行解析

或者干脆把表单提交给servlet。

【讨论】:

    【解决方案2】:

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

    Convert JavaScript string in dot notation into an object reference

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 2014-12-13
      • 1970-01-01
      相关资源
      最近更新 更多