Komplexe Objekte per Ajax übergeben

Mmmh, ich weiss nicht, wo es da genau hakt bei dir, du hast ja bisher auch nicht gezeigt, wie du es aktuell sendest...vielleicht ist da ein Fehler?

Hier mal ein simples Beispiel:
Code:
<a href="#">Klick</a>
<script type="text/javascript" src="http://www.json.org/json2.js"></script>
<script type="text/javascript">
<!--
//Die Famile
var oma1  ={LastName:'Schmidt', Name:'Susi Sorglos',    Parents:{Father:null,Mother:null}};
var opa1  ={LastName:'Schulz',  Name:'Sepp',            Parents:{Father:null,Mother:null}};
var oma2  ={LastName:'Müller',  Name:'Marie-Antoinette',Parents:{Father:null,Mother:null}};
var opa2  ={LastName:'Meier',   Name:'Moritz',          Parents:{Father:null,Mother:null}};
var mutti ={LastName:'Meier',   Name:'Beate',           Parents:{Father:opa1,Mother:oma1}};
var vati  ={LastName:'Meier',   Name:'Bernd',           Parents:{Father:opa2,Mother:oma2}};
var kind  ={LastName:'Meier',   Name:'Max',             Parents:{Father:vati,Mother:mutti}};

//Das Objekt stringified und encoded als Parameter fürs Linkziel oben setzen
document.links[0].href='?json='+encodeURIComponent(JSON.stringify(kind));

//-->
</script>
Das Linkziel bekommt also über die GET-Variable json das Objekt geliefert.
Das muss nun nur noch dekodiert werden.
In PHP (hab keine Ahnung von ASP:-() würde ich mir das Objekt so ausgeben lassen(PHP hat eine entsprechende Methode bereits inklusive):
PHP:
print_r(json_decode($_GET['json']));
das Ergebnis(getestet) sieht dann so aus:
Code:
stdClass Object
(
    [LastName] => Meier
    [Name] => Max
    [Parents] => stdClass Object
        (
            [Father] => stdClass Object
                (
                    [LastName] => Meier
                    [Name] => Bernd
                    [Parents] => stdClass Object
                        (
                            [Father] => stdClass Object
                                (
                                    [LastName] => Meier
                                    [Name] => Moritz
                                    [Parents] => stdClass Object
                                        (
                                            [Father] => 
                                            [Mother] => 
                                        )

                                )

                            [Mother] => stdClass Object
                                (
                                    [LastName] => Müller
                                    [Name] => Marie-Antoinette
                                    [Parents] => stdClass Object
                                        (
                                            [Father] => 
                                            [Mother] => 
                                        )

                                )

                        )

                )

            [Mother] => stdClass Object
                (
                    [LastName] => Meier
                    [Name] => Beate
                    [Parents] => stdClass Object
                        (
                            [Father] => stdClass Object
                                (
                                    [LastName] => Schulz
                                    [Name] => Sepp
                                    [Parents] => stdClass Object
                                        (
                                            [Father] => 
                                            [Mother] => 
                                        )

                                )

                            [Mother] => stdClass Object
                                (
                                    [LastName] => Schmidt
                                    [Name] => Susi Sorglos
                                    [Parents] => stdClass Object
                                        (
                                            [Father] => 
                                            [Mother] => 
                                        )

                                )

                        )

                )

        )

)
...also genau das, was ich in JS erstellt habe, ein kleiner Familienstammbaum.

In ASP müsstest du den String stattdessen mit der Methode parse() dekodieren, wie hier beschrieben: http://tforster.wik.is/ASP_Classic_Practices_For_The_21st_Century/JSON4ASP
 
Hallo Sven,

ich bin erst heute dazu gekommen, das Thema zu schließen. Ich habe nun eine Lösung gefunden. Im wesentlichen gab es zwei Probleme.

1) Cross-Domain Calls.
In meiner Projektmappe sind WebService und WebSite zwei verschiedene Anwendungen, die vom VisualStudio Entwicklungswebserver unter localhost auf verschiedenen Ports laufen. Erst Dave Ward (http://www.encosia.com) hat mich auf diese Problematik aufmerksam gemacht.

2) generische Listen des .net Frameworks
Das JavaScript Parents-Array ist eigentlich eine generische .net Collection, die vom Interface ICollection abgeleitet wird. Und genau da lag das Problem, da sich scheinbar generische Collections nicht in ein Array Deserialisieren lassen. Ich stehe nun also vor der Möglichkeit, es ohne JavaScript Support anzubieten oder aber diese Collection von IList abzuleiten, mit der eine Deserialisierung funktioniert. Beides ist für mich nicht die ideale Lösung, daher werde ich wohl mal im .net Bereich vom Forum um Rat fragen.

Übrigens allen, die mit JavaScript Ajax Calls absetzen, empfehle ich FireBug. Und da ganz speziell unter Netzwerk die Option XHR näher zu betrachten. Die IE Developer Toolbar, hat meiner Suche nach nicht dieses wirklich gute Feature.
 

Neue Beiträge

Zurück