我有一棵树,要显示在屏幕上,它基本上是一个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
节点的引用。因此,这会产生circular reference
,其中节点存储其子节点的引用,并且每个子节点存储其父节点的引用
由于这个原因,我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代码中接收并进一步处理吗?
答案 0 :(得分:0)
如果无法清除插件,解决方法是克隆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',则调整代码。