gpt4 book ai didi

javascript - 无法将 JSON 对象作为请求参数发送,因为 JSON.stringify 给出了循环引用错误

转载 作者:行者123 更新时间:2023-11-30 06:39:05 24 4
gpt4 key购买 nike

我有一棵树,要显示在屏幕上,它基本上是一个 JSON 对象。我想将此 JSON 对象作为 request 参数发送到 Java 类。

以下是 JSON 对象的示例:

// Root node
var rootNode = { Content: "Root", Nodes:[] };
// First Level
rootNode.Nodes[0] = { Content: "Employee Code", navigationType: "0"};
rootNode.Nodes[1] = { Content: "Problem Area", navigationType: "1" };
// Second Level
rootNode.Nodes[1].Nodes = [{ Content : "ACC-HO", Collapsed: true},
{ Content : "ACC-SALES" },
{ Content : "BUSI. HEAD", ToolTip: "Click ME!" },
{ Content : "CEO"}
];

现在,从 JSON 对象创建此树的插件将 Parent 节点的引用存储在每个节点中。因此,这会产生一个循环引用,其中一个节点存储其子节点的引用,每个子节点存储其父节点的引用

因此我是 unable to use JSON.stringify(rootNode)

我想使用 Ajax 将 rootNode 对象作为请求参数发送。我做了以下事情:

$.ajax({
type : "POST",
url : "treeDemo_!saveTree",
data: {treeObject: JSON.stringify(rootNode) },
success : function(resp) {
alert('success');
}
});

但正如我所提到的,JSON.stringify 不适用于我的情况。那么谁能建议一种替代方法来发送 JSON 对象作为请求参数,我可以在 Java 代码中接收它并进一步处理?

最佳答案

如果您无法清理插件,一个解决方案是克隆 rootNode 对象,并且在此过程中不要复制“Parent”属性:

function goclone(source) {
if (Object.prototype.toString.call(source) === '[object Array]') {
var clone = [];
for (var i=0; i<source.length; i++) {
clone[i] = goclone(source[i]);
}
return clone;
} else if (typeof(source)=="object") {
var clone = {};
for (var prop in source) {
if (source.hasOwnProperty(prop) && prop!='Parent') {
clone[prop] = goclone(source[prop]);
}
}
return clone;
} else {
return source;
}
}

var serializableRootNode = goclone(rootNode);

serializableRootNode 不包含“Parent”属性。

如果父引用未准确称为“Parent”,则调整代码。

关于javascript - 无法将 JSON 对象作为请求参数发送,因为 JSON.stringify 给出了循环引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12817310/

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