1

我有一个被序列化并解析为 JSON 字符串的表单。其中一个表单字段是包含 JSON 对象的隐藏字段。我使用另一个教程中的以下函数来转换我的表单数据:

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

这很好用,除了我的包含 JSON 的隐藏字段用双引号括起来,当返回到我的控制器时它不会绑定。如果我手动删除双引号,一切正常。

遇到:

{"Package":"[{"Qty":"15"}]","Fname":"test name"}

需要是:

{"Package":[{"Qty":"15"}],"Fname":"test name"}

我该如何修改上述函数来解决这个问题?

谢谢!

更新

在新版本的函数中考虑了这一点:

$.fn.serializeObject = function () {
                    var o = {};
                    var a = this.serializeArray();
                    $.each(a, function () {
                        if (o[this.name] !== undefined) {
                            if (!o[this.name].push) {
                                o[this.name] = [o[this.name]];
                            }
                            o[this.name].push(this.value || '');
                        } else {
                            if (this.value.charAt(0) == "[") {
                                o[this.name] = JSON.parse(this.value);
                            }
                            else {
                                o[this.name] = this.value || '';
                            }
                        }
                    });
                    return o;
                };
4

1 回答 1

1

serializeObjectJSON.stringify代替您的调用,它应该确保 JSON 是有效的,即

var json = JSON.stringify(form.serializeObject());
于 2013-09-25T11:48:33.840 回答