【问题标题】:Create custom JSON string from form从表单创建自定义 JSON 字符串
【发布时间】:2012-01-31 21:35:52
【问题描述】:

我有一个表单,我想通过 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 字符串,其中包含输入名称和值作为键和值对,但我不知道如何更改代码以获取我想要的需要。

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

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

谢谢。

【问题讨论】:

    标签: jquery json forms serialization


    【解决方案1】:

    第一个例子很接近。这应该在这里工作:

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

    【讨论】:

    • 太棒了,感谢您提供如此快速的解决方案。它几乎可以工作,但数量正在变成一个字符串,即{"cProduct": "01", "iQty": "1"}而不是{"cProduct": "01", "iQty": 1}。对此我能做些什么吗?
    • 在 n['value'] 周围添加一个 parseInt 应该可以解决问题: json['iQty'] = parseInt(n['value']);
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2018-09-07
    • 2019-09-29
    • 2018-03-07
    • 2014-04-22
    • 1970-01-01
    相关资源
    最近更新 更多