我在通过JSON.stringify函数创建JSON对象时遇到了困难。当我手动创建对象时,我可以引用正确的对象没有问题,但是,当我通过这个函数(serializeObject)创建对象时,它似乎并不认识到它是一个对象。两者似乎都以相同的方式构建。
这是我尝试做的事情的小提琴: http://jsfiddle.net/CyM37/1/
在这个小提琴中,首先我要创建对象并转储到div中。然后我试图引用一个对象并将其转储到另一个div中(这部分不工作)。您可以取消注释代码以查看硬编码的JSON对象是否正常工作。
JS
$('#createJSON').click(function(){
var allItems = JSON.stringify($('#myForm').serializeObject());
var manualJSON = { "firstName":"John","lastName":"Doe"};
$('#results').html(allItems);
$('#results2').html(allItems.checkbox2);
//$('#results2').html(manualJSON.lastName);
});
//serialize into JSON function
$.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对象正在工作但是我通过函数创建的对象的任何想法都不是吗?它们看起来结构相同。
答案 0 :(得分:2)
这是因为你把对象变成了一个字符串。例如:
console.log(allItems[0]) // writes "{"
试试这个:
var allItems = $('#myForm').serializeObject();
这是更新后的FIDDLE
答案 1 :(得分:0)
您似乎对stringify
感到困惑。它将对象转换为JSON 字符串。因此,在stringify
之后尝试访问它的属性是没有意义的。该字符串没有checkbox2
属性。
你serializeObject
方法生成一个对象,所以使用它。
试试这个:
$('#createJSON').click(function(){
var allItems = $('#myForm').serializeObject();
$('#results').html(JSON.stringify(allItems));
$('#results2').html(allItems.checkbox2);
});