Javascript knockoutJS错误:将循环结构转换为JSON
我遇到了一个错误:将循环结构转换为JSON 下面是场景- 我从两个不同的绑定调用了两个不同的函数 按钮1绑定-Javascript knockoutJS错误:将循环结构转换为JSON,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我遇到了一个错误:将循环结构转换为JSON 下面是场景- 我从两个不同的绑定调用了两个不同的函数 按钮1绑定- event: { keypress: $root.AddComments } 这个函数的定义如下 self.AddComments = function (data, event) { try { var Id = 0; if ($.isNumeric(data.Id)) { Id = data.Id;
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)
{ }
};
第二个按钮绑定是-click:$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请求中提交数据?这是click事件参数,所以我觉得这不是必要的和/或是无意的
如果数据包含AJAX请求所需的某些信息,我建议您提取特定值并提交您自己的对象。您是否能够创建一个JSFIDLE来复制该问题?因为目前我认为这里没有足够的信息来帮助你。另外,进入http调用的数据的结构是什么?如果有帮助,当一个对象属性包含指向无法转换为JSON的DOM元素的指针时,会出现此错误。我猜您试图保存为JSON的data.Comment或data.Id包含指向DOM元素的指针;例如,如果data.Id==$'some-Id'而不是'some-Id'。是的,您完全正确。ajaxrequest中的数据正在此处创建循环引用。谢谢