Frage

Lief in eine "Out of Stack Space" Fehler beim Versuch zu serialisieren eines ASP.Net AJAX Array-Objekt.

Hier ist das Szenario mit vereinfachter code:

  1. Default.aspx

  2. MainScript.js

    function getObject(){
        return new Array();
    }
    
    function function1(obj){
        var s=Sys.Serialization.JavaScriptSerializer.serialize(obj);
        alert(s);
    }
    
    function function2(){
        var obj=getObject();
        var s=Sys.Serialization.JavaScriptSerializer.serialize(obj);
        alert(s);
    }
    
  3. Content.aspx

  4. ContentScript.js

    function serializeObject(){
        var obj=window.top.getObject();
        window.top.function1(obj); // <– This works fine
    
        obj=new Array();
        window.top.function1(obj); // <– this causes an Out of Stack Space error
    }
    

Der code für die Beispiel-Seiten und JavaScript hier.

Die Buchung der code für die aspx-Seiten, die hier problematisch.So bitte überprüfen Sie den obigen link, um den code für die aspx-Seiten.

Eine web-Seite (default.aspx) mit einem IFrame hostet eine Seite Inhalt (content.aspx).

Sie auf die Schaltfläche "Serialisieren Objekt" - Schaltfläche ruft die JavaScript-Funktion serializeObject().Die Serialisierung funktioniert gut für Array-Objekte erstellt, in dem oberen Fenster (außerhalb des Rahmens).Allerdings, wenn das array-Objekt erstellt wird, in der die IFrame -, Serialisierungs-Bomben, die mit einem out-of-stack-Speicherplatz Fehler.Ich trat durch ASP.Net AJAX-JS-Dateien und was ich entdeckte, ist, geht der Prozess in eine endlose Schleife versucht, um herauszufinden, den Typ des array-Objekts.Endlose Anruf Anzahl.IsInstanceOf, und schon bald erhalten Sie eine out-of-stack-Fehler.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Dieses Problem tritt auf, weil Sys.Serialization.JavaScriptSerializer keine Objekte aus anderen Frames serialisiert werden können, sondern nur diejenigen Objekte, die im aktuellen Fenster instanziiert wo (die serialize () -Methode aufruft). Die einzige Lösung, die für mich bekannt ist, dass es von anderen Rahmen Klon des Objekts erzeugt werden, bevor serialize () -Methode aufrufen.

Beispiel der clont () Methode finden Sie hier (Kommentare in russischer Sprache): Link-Text

Andere Tipps

konvertierte ich dein Beispiel auf eine Reihe von statischen HTML-Dateien und dowloaded die Standalone Microsoft Ajax Library 3.5 testen mit. Es hat nicht Problem auf beiden Firefox 3 oder IE 7, aber ich habe die erste Warnmeldung angezeigt bemerken [] (Array) und die zweiten {} (ein Objekt).

Dann habe ich konvertierte Ihren neuen Array () Code:

  var obj = [];
  obj.push(1);

und danach, ich habe [1] und { "0", 1} ist die Alarm-Boxen. Ich glaube nicht, der Fehler mit JavaScriptSerializer ist, sondern etwas mit dem Übertragen von Objekten in Bildern zu tun.

Ich habe keine Möglichkeit, Ihren Code jetzt testen, aber es sieht aus wie ein Fehler in JavaScriptSerializer.serialize mir. Meine Vermutung ist, dass es versucht, eine Art von Typ auf dem Array über die CLR Überprüfung zu tun, und dass es nicht ein leeres Array richtig umgehen kann.

Haben Sie versucht, ein Element eines serializable Typ mit dem Array in Ihrem Code hinzufügen? Wenn ja, was passiert?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top