gpt4 book ai didi

javascript - JSON.stringify(ComplexArray) 返回一个空字符串

转载 作者:行者123 更新时间:2023-12-02 17:42:46 25 4
gpt4 key购买 nike

我有以下使用 JQuery 和 Knockout 的 JavaScript(我有将两者一起使用的具体原因)

$(document).ready(
function () {
var Crime = function (Id, CaseNumber, DateOfIncident, Description) {
var self = this;
self.Id = Id;
self.CaseNumber = CaseNumber;
self.DateOfIncident = DateOfIncident;
self.Description = Description;
}

var CrimesViewModel = function () {
var self = this;
//Data
self.items = ko.observableArray()

//operations
addCrime = function () {
if ($("#AddCrimeForm").valid()) {
crime = new Crime(0,
$("#AddCrimeForm #CaseNumber").val(),
$("#AddCrimeForm #DateOfIncident").val(),
$("#AddCrimeForm #Description").val());

self.items.push(this.crime);

$("#AddCrimeForm #CaseNumber").val("");
$("#AddCrimeForm #DateOfIncident").val("");
$("#AddCrimeForm #Description").val("");
}
}

self.removeCrime = function (item) {
self.items.remove(item);
}

loadCrimes = function (JSONstring) {
try {
self.JSONItems = JSON.parse(JSONstring);
if (self.JSONItems != null)
if (self.JSONItems != null)
for (i = 0; i < self.JSONItems.length; i++)
self.items.push(self.JSONItems[i]);
}
catch (e) {
alert(e.message + "\n\n" + e.description + "\n\n" + e.stack)
}
}

getCrimes = function () {
var self = this;
return JSON.stringify(self.items);
}

}

var CrimesVM = new CrimesViewModel()

ko.applyBindings(CrimesVM, $("#CrimeList")[0])

}
);

如上面的代码所示,我有一个 ViewModel,它基本上由一个包含 Crime 对象的数组组成。

getCrimes() 函数的目的是在调用时将数组序列化为 JSON。

不幸的是,getCrimes() 函数返回一个空字符串,因为 JSON.stringify(self.items) 返回一个空字符串。

知道我在这里做错了什么吗?

**

更新

**

这是基于下面给出的答案的工作代码:

$(document).ready(
function () {
var Crime = function (Id, CaseNumber, DateOfIncident, Description) {
var self = this;
self.Id = Id;
self.CaseNumber = CaseNumber;
self.DateOfIncident = DateOfIncident;
self.Description = Description;
}

var CrimesViewModel = function () {
var self = this;
//Data
self.items = ko.observableArray()

//operations
addCrime = function () {
if ($("#AddCrimeForm").valid()) {
crime = new Crime(0,
$("#AddCrimeForm #CaseNumber").val(),
$("#AddCrimeForm #DateOfIncident").val(),
$("#AddCrimeForm #Description").val());

self.items.push(this.crime);

//Update the correspoding hidden field
$("#CrimeCollection_New").val(ko.toJSON(self));

$("#AddCrimeForm #CaseNumber").val("");
$("#AddCrimeForm #DateOfIncident").val("");
$("#AddCrimeForm #Description").val("");
}
}

self.removeCrime = function (item) {
self.items.remove(item);
//Update the correspoding hidden field
$("#CrimeCollection_New").val(ko.toJSON(self));
}

loadCrimes = function (JSONstring) {
try {
self.JSONItems = JSON.parse(JSONstring);
if (self.JSONItems != null)
if (self.JSONItems != null)
for (i = 0; i < self.JSONItems.length; i++)
self.items.push(self.JSONItems[i]);
}
catch (e) {
alert(e.message + "\n\n" + e.description + "\n\n" + e.stack)
}
}



}

var CrimesVM = new CrimesViewModel()

ko.applyBindings(CrimesVM, $("#CrimeList")[0])

}
);

最佳答案

因为 self.items 是一个 Knockout 可观察对象,所以您应该使用 Knockout 函数 .toJS() 来获取值: ko.toJS(self.项目)

或者,如果您想将项目直接转换为 JSON,可以使用 .toJSON()

Knockout: Loading and saving JSON data

关于javascript - JSON.stringify(ComplexArray) 返回一个空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22043276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com