从表单创建自定义JSON字符串

时间:2012-01-31 21:35:53

标签: jquery json forms serialization

我有一个表单,我想通过jQuery AJAX作为JSON提交,这样我就可以使用我的编程语言的本机方法(使用READ-JSON的OpenEdge)将其读入服务器端的临时表中。我的表单需要生成的JSON示例是:

{"ttOrder": [
  {
    "cProduct": "prod01",
    "iQty": 123
  },
  {
    "cProduct": "prod02",
    "iQty": 456
  }
]}

我的表格由一个表格组成,该表格包含产品信息,产品代码,描述等行和数量输入字段,例如

<input id="prod01" name="prod01" value="0">

从Stack Overflow搜索我发现了一些看似他们可能有帮助的建议,因为我认为我需要序列化表单:

(function( $ ){
    $.fn.serializeJSON=function() {
        var json = {};
        jQuery.map($(this).serializeArray(), function(n, i){
            json[n['name']] = n['value'];
        });
        return json;
    };
})( jQuery );

var obj = {"ttOrder": [$('#prodform').serializeJSON() ]};

然后在$ .ajax调用中使用

...
data: JSON.stringify(obj),
...

但是,这给出了以下内容:

{"ttOrder": [
  {
    "prod01": "123",
    "prod02": "456"
  }
]}

我认为上面的所有代码都在创建一个JSON字符串,其中包含输入名称和值作为键和&amp;价值对,但我没有专业知识来改变代码以获得我所需要的。

我认为我想要实现的是拥有一个对象数组,其中数组的名称始终为ttOrder(映射到我的临时表名称),对象的第一个条目是产品代码(总是cProduct - 映射到我的临时表字段名称),其值为输入的名称,对象的第二个条目是数量(总是iQty - 映射到我的临时表字段值)。

请原谅我使用的任何不正确的术语。

感谢。

1 个答案:

答案 0 :(得分:3)

第一个例子是关闭的。这应该在这里工作:

(function( $ ){
$.fn.serializeJSON=function() {
    return jQuery.map($(this).serializeArray(), function(i, n){
        var json = {};
        json['cProduct'] = n['name'];
        json['iQty'] = parseInt(n['value']);

        return json;

    }).get();
};
})( jQuery );

var obj = {"ttOrder": $('#prodform').serializeJSON()};