2 Stimmen

Nicht in der Lage, ein JSON-Objekt als Anforderungsparameter zu senden, da JSON.stringify einen zirkulären Verweisfehler liefert.

Ich habe einen Baum, der auf dem Bildschirm angezeigt werden soll und im Grunde ein JSON-Objekt ist. Ich möchte dieses JSON-Objekt als Anforderungs-Parameter an die Java-Klasse senden.

Hier ist ein Beispiel des JSON-Objekts:

// Wurzelknoten
var rootNode = { Inhalt: "Root", Knoten:[] };
// Erste Ebene
rootNode.Knoten[0] = { Inhalt: "Mitarbeiter Code", navigationstyp: "0"};
rootNode.Knoten[1] = { Inhalt: "Problem Bereich", navigationstyp: "1" };
// Zweite Ebene
rootNode.Knoten[1].Knoten = [{ Inhalt : "ACC-HO", Zusammengefasst: true},
                           { Inhalt : "ACC-SALES" },
                           { Inhalt : "BUSI. HEAD", ToolTip: "Klick mich!" },
                           { Inhalt : "CEO"}
                          ];

Jetzt speichert das Plugin, das diesen Baum aus dem JSON-Objekt erstellt, die Referenz des Eltern-Knotens in jedem der Knoten. Daher ergibt sich eine Zirkuläre Referenz, bei der ein Knoten die Referenz seiner Kinder speichert und jeder Kindknoten die Referenz seines Elternteils speichert

Aufgrund dessen kann ich JSON.stringify(rootNode) nicht verwenden

Ich möchte das rootNode-Objekt als Anforderungsparameter mit Ajax senden. Ich habe folgendes gemacht:

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

Aber wie bereits erwähnt funktioniert JSON.stringify in meinem Fall nicht. Kann mir also jemand einen alternativen Weg vorschlagen, um das JSON-Objekt als Anforderungsparameter zu senden, das ich im Java-Code empfangen und weiter verarbeiten kann?

0voto

Denys Séguret Punkte 355205

Eine Lösung, wenn das Plug-in nicht gereinigt werden kann, besteht darin, das rootNode-Objekt zu klonen und dabei die 'Parent'-Eigenschaft nicht zu kopieren:

function goclone(source) {
    if (Object.prototype.toString.call(source) === '[object Array]') {
        var clone = [];
        for (var i=0; i

``

Das serializableRootNode enthält nicht die 'Parent'-Eigenschaften.

Passen Sie den Code an, wenn die Elternreferenz nicht genau 'Parent' genannt wird.

``

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X