我有一个序列化并解析为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;
};
答案 0 :(得分:1)
将serializeObject
与JSON.stringify的号码联系起来,应该确保JSON有效,即
var json = JSON.stringify(form.serializeObject());