knockoutJS error: Converting circular structure to JSON
knockoutJS error: Converting circular structure to JSON
我遇到错误:将循环结构转换为 JSON
。
场景如下-
我从两个不同的绑定中调用了两个不同的函数。
按钮 1 绑定 -
event: { keypress: $root.AddComments }
此函数定义如下
self.AddComments = function (data, event) {
try {
var Id = 0;
if ($.isNumeric(data.Id)) {
Id = data.Id;
} else {
Id = data.Id();
}
var HdnSaveChanges = document.getElementById('HdnSaveChanges');
HdnSaveChanges.value = "Unsaved";
if (event.which == 13) {
if (data.Comment() != "") {
HdnSaveChanges.value = "Saved";
var Comment1 = { "Description": "" + data.Comment() + "" };
ajaxRequest("post", "/api/myAPI/PostComment/" + (Id || "") + "/" + (loginUserId || ""), Comment1, null)
.done(function (result) {
var newId2 = [result];
var tempComment = new Comment(newId2[0], Id);
tempComment.ParentObj = data;
tempComment.User = tempComment.User();
tempComment.BadgeTypeCss("SmallBadgeType SmallBadgeType" + tempComment.User.BadgeType);
tempComment.CurrentLevelCss("SmallCurrentLevel SmallCurrentLevel" + tempComment.User.CurrentLevel);
var id = ko.utils.arrayFirst(self.ids(), function (currentIds) {
return currentIds.Id() == Id;
});
if (id) {
tempComment.MeLiked = ko.observable(false);
tempComment.MeUnLiked = ko.observable(true);
idea.comments.push(tempComment);
idea.TotalComments(data.TotalComments() + 1);
}
})
.fail(function (jqxhr, textStatus, error) {
console.log("Request Failed" + textStatus + "," + error + ",," + jqxhr.toString());
});
data.Comment("");
}
}
return true;
}
catch (e)
{ }
};
第二个按钮绑定是 - 点击:$root.SubmitOnClick
定义就像 -
self.SubmitOnClick= function (data, event) {
var Id = 0;
if ($.isNumeric(data.Id)) {
Id = data.Id;
} else {
Id = data.Id();
}
ajaxRequest("post", "/api/myAPI/Update/" + (Id || "") + "/" + (loginUserId || ""), data, null)
.done(function (result) {
var newId3 = [result];
var id1 = ko.utils.arrayFirst(self.ids(), function (currentIds) {
return currentIds.Id() == Id;
});
if (id1) {
id1.MyValue1(newId3[0].MyValue1);
id1.MyValue2(newId3[0].MyValue2);
id1.MyValue3(newId3[0].MyValue3);
id1.TotalValue1(newId3[0].TotalValue1);
id1.TotalValue2(newId3[0].TotalValue2);
id1.TotalValue3(newId3[0].TotalValue3);
id1.Average = ko.computed(function () {
var sum = id1.TotalValue1() + id1.TotalValue2() + id1.TotalValue3();
if (sum > 0) {
return Math.round((sum / 3) * 10) / 10;
}
else {
return 0;
}
}).extend({ notify: 'always' });
}
})
.fail(function (jqxhr, textStatus, error) {
console.log("Request Failed" + textStatus + "," + error + ",," + jqxhr.toString());
});
}
当我在第一个函数之后调用第二个函数时出现问题,但反之亦然。
什么在此处进行循环调用,可能的解决方案是什么。
也许我误解了您的代码,但我认为您的问题出在这里:
ajaxRequest("post", "/api/myAPI/Update/" + (Id || "") + "/" + (loginUserId || ""), data, null)
为什么要在 AJAX 请求中提交 data
?那是点击事件参数,所以我觉得这不是必需的 and/or 是无意的。
如果 data
包含您在 AJAX 请求中确实需要的一些信息,我建议提取特定值并提交您自己的对象。
我遇到错误:将循环结构转换为 JSON
。
场景如下-
我从两个不同的绑定中调用了两个不同的函数。
按钮 1 绑定 -
event: { keypress: $root.AddComments }
此函数定义如下
self.AddComments = function (data, event) {
try {
var Id = 0;
if ($.isNumeric(data.Id)) {
Id = data.Id;
} else {
Id = data.Id();
}
var HdnSaveChanges = document.getElementById('HdnSaveChanges');
HdnSaveChanges.value = "Unsaved";
if (event.which == 13) {
if (data.Comment() != "") {
HdnSaveChanges.value = "Saved";
var Comment1 = { "Description": "" + data.Comment() + "" };
ajaxRequest("post", "/api/myAPI/PostComment/" + (Id || "") + "/" + (loginUserId || ""), Comment1, null)
.done(function (result) {
var newId2 = [result];
var tempComment = new Comment(newId2[0], Id);
tempComment.ParentObj = data;
tempComment.User = tempComment.User();
tempComment.BadgeTypeCss("SmallBadgeType SmallBadgeType" + tempComment.User.BadgeType);
tempComment.CurrentLevelCss("SmallCurrentLevel SmallCurrentLevel" + tempComment.User.CurrentLevel);
var id = ko.utils.arrayFirst(self.ids(), function (currentIds) {
return currentIds.Id() == Id;
});
if (id) {
tempComment.MeLiked = ko.observable(false);
tempComment.MeUnLiked = ko.observable(true);
idea.comments.push(tempComment);
idea.TotalComments(data.TotalComments() + 1);
}
})
.fail(function (jqxhr, textStatus, error) {
console.log("Request Failed" + textStatus + "," + error + ",," + jqxhr.toString());
});
data.Comment("");
}
}
return true;
}
catch (e)
{ }
};
第二个按钮绑定是 - 点击:$root.SubmitOnClick
定义就像 -
self.SubmitOnClick= function (data, event) {
var Id = 0;
if ($.isNumeric(data.Id)) {
Id = data.Id;
} else {
Id = data.Id();
}
ajaxRequest("post", "/api/myAPI/Update/" + (Id || "") + "/" + (loginUserId || ""), data, null)
.done(function (result) {
var newId3 = [result];
var id1 = ko.utils.arrayFirst(self.ids(), function (currentIds) {
return currentIds.Id() == Id;
});
if (id1) {
id1.MyValue1(newId3[0].MyValue1);
id1.MyValue2(newId3[0].MyValue2);
id1.MyValue3(newId3[0].MyValue3);
id1.TotalValue1(newId3[0].TotalValue1);
id1.TotalValue2(newId3[0].TotalValue2);
id1.TotalValue3(newId3[0].TotalValue3);
id1.Average = ko.computed(function () {
var sum = id1.TotalValue1() + id1.TotalValue2() + id1.TotalValue3();
if (sum > 0) {
return Math.round((sum / 3) * 10) / 10;
}
else {
return 0;
}
}).extend({ notify: 'always' });
}
})
.fail(function (jqxhr, textStatus, error) {
console.log("Request Failed" + textStatus + "," + error + ",," + jqxhr.toString());
});
}
当我在第一个函数之后调用第二个函数时出现问题,但反之亦然。
什么在此处进行循环调用,可能的解决方案是什么。
也许我误解了您的代码,但我认为您的问题出在这里:
ajaxRequest("post", "/api/myAPI/Update/" + (Id || "") + "/" + (loginUserId || ""), data, null)
为什么要在 AJAX 请求中提交 data
?那是点击事件参数,所以我觉得这不是必需的 and/or 是无意的。
如果 data
包含您在 AJAX 请求中确实需要的一些信息,我建议提取特定值并提交您自己的对象。