2012-01-31 67 views
2

我有一个表格,我想通过jQuery AJAX提交的JSON,这样我就可以读入使用一个我的编程语言的本地方法服务器端的临时表的定制JSON字符串(OpenEdge使用READ-JSON)。我的形式需要产生JSON的一个例子是:创建一个从形式

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

我的形式由包含的产品信息,产品代码,说明等,并且一定量的输入栏,例如行的表的

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

大约从堆栈溢出的搜索,我发现了几个看起来像他们也许会有帮助,因为我觉得我需要连载的形式建议:

(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() ]}; 

然后在$就调用使用

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

然而,这给出了以下几点:

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

我认为所有上面的代码做的是创造一个JSON字符串包含输入名称和值作为重点&值对的,但我没有诀窍更改代码,让我什么,我要求。

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

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

谢谢。

回答

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()}; 
+0

辉煌,并感谢这样一个快速的解决方案。它几乎工作,但数量正在变成一个字符串即 '{ “cProduct”: “01”, “iQty”: “1”}'而不是'{ “cProduct”: “01”, “iQty”: 1}'。我能做些什么吗? – 2012-01-31 22:00:30

+0

添加parseInt函数围绕N [ '值']应该做的伎俩:JSON [ 'iQty'] = parseInt函数(N [ '值']); – 2012-01-31 23:33:48

+0

是的,它现在完美的工作。非常感谢Brian! – 2012-02-01 12:02:46