2

我有一棵树,要显示在屏幕上,它基本上是一个 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一个节点存储其子节点的引用,每个子节点存储其父节点的引用

因此,我无法使用 JSON.stringify(rootNode)

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

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

但正如我所提到的, JSON.stringify 在我的情况下不起作用。那么任何人都可以提出另一种方法来发送 JSON 对象作为我可以在 Java 代码中接收并进一步处理的请求参数吗?

4

1 回答 1

0

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

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不包含“父”属性。

如果父引用不完全称为“父”,则调整代码。

于 2012-10-10T10:36:50.907 回答