2

基本的にJSONオブジェクトである画面に表示されるツリーがあります。この JSON オブジェクトをパラメーターとして Java クラスに送信したいと考えていrequestます。

以下は、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) を使用できません

rootNodeAjax を使用して、オブジェクトをリクエスト パラメータとして送信したいと考えています。私は次のことをしました:

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

しかし、前述したように、JSON.stringify は私の場合は機能しません。では、Java コードで受け取ってさらに処理できるリクエスト パラメータとして JSON オブジェクトを送信する別の方法を誰かが提案できますか?

4

1 に答える 1

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」と呼ばれていない場合は、コードを修正してください。

于 2012-10-10T10:36:50.907 に答える