Schorsch: JSON Iframe Parser

Guten Tag

Dokument A erstellt einen Iframe.
Dieser wird abgeschickt (fileupload).
Der Server liefert JSON zurück, nämlich:

{'eins':'blah', 'html':'<a href="blah.html" title="blih">'}

Von Dokument A gehe ich nun das JSON holen:

content = iframeId.contentDocument.body.innerHTML

Problem:
Ich erhalte nun das JSON mit falschen Hochkommas:

{"eins":"blah", "html":"<a href="blah.html" title="blih">"}

Die Funktion eval bricht nun zusammen, da es kein gültiges JSON
ist, da die Kommas ja nicht stimmen.

Frage:
Kann ich

- Das JSON aus dem Iframe so holen,
    dass es mir die Hochkommas nicht verfälscht?

- Kann ich {"eins":"blah", "html":"<a href="blah.html" title="blih">"}
    mit einem geeignetes Parser trotzdem parsen?

Bin um jede Hilfe froh, stecke fest!
NB: Arbeite mit jQuery

Merci!

  1. Hi,

    Dokument A erstellt einen Iframe.
    Dieser wird abgeschickt (fileupload).
    Der Server liefert JSON zurück, nämlich:

    {'eins':'blah', 'html':'<a href="blah.html" title="blih">'}

    Von Dokument A gehe ich nun das JSON holen:

    content = iframeId.contentDocument.body.innerHTML

    Nein, du gehst das holen, was der Browser für die angebrachte textuelle HTML-Repräsentation des Dokumentinhaltes hält.
    Das kann je nach Browser ganz unterschiedlich aussehen, und sogar reichlich grausam (im IE).

    Kann ich

    - Das JSON aus dem Iframe so holen,
        dass es mir die Hochkommas nicht verfälscht?

    Das kommt erst mal drauf an, wie du es überhaupt in den Iframe hineinbugsierst.

    - Kann ich {"eins":"blah", "html":"<a href="blah.html" title="blih">"}
        mit einem geeignetes Parser trotzdem parsen?

    Klar, wenn dir danach ist, könntest du dir was basteln, was das zunächst wieder in gültiges JSON umwandelt. Allerdings, wie gesagt - innerHTML kann je nach Browser vollkommen unterschiedlich ausfallen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Salut

      innerHTML kann je nach Browser vollkommen unterschiedlich ausfallen.

      Demnach lautet meine Frage:
      Wie lautet die Alternative zu
        innerHTML

      welche mir den Inhalt genau so liefert, wie ihn der Iframe
      vom Server bekommen hat? Hat da jQuery was, mit dem ich auf den
      Inhalt im Body des Iframes zugreifen kann?

      Gruss
      Schorsch

    2. Salut!

      - Das JSON aus dem Iframe so holen,
          dass es mir die Hochkommas nicht verfälscht?

      Das kommt erst mal drauf an, wie du es überhaupt in den Iframe hineinbugsierst.

      Der Iframe geht als Formular auf den Server.
      Der Server gibt JSON Text aus.
      Dieser ist also dann im Body des Iframes.

      Gruss
      Schorsch

      1. Hi,

        Der Server gibt JSON Text aus.
        Dieser ist also dann im Body des Iframes.

        Warum?
        Warum nicht in vernünftiger Form, in einem Script-Element?

        Dann könnte das im Iframe selber schon geparst werden, und du bräuchtest nur noch das entstehende Objekt vom anderen Dokument aus abholen.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Salut!

          Dann könnte das im Iframe selber schon geparst werden, und du bräuchtest nur noch das entstehende Objekt vom anderen Dokument aus abholen.

          Gute Idee, merci!

          Iframe:

          $(function(){  
             var testvar = {'blah':'traaa!', 'blih':'hello world'};  
          }
          

          Anderes Dokument:
          $("#myIframe").undwieweiter?

          Wie komme ich auf die testvar, welche im Iframe
          im jQuery Scope drin definiert wurde?

          Tnx!
          Schorsch

          1. Hi,

            Wie komme ich auf die testvar, welche im Iframe
            im jQuery Scope drin definiert wurde?

            Nix Scope - globale Variable, und gut.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. Salut

              Nix Scope - globale Variable, und gut.

              Leider hab ich grad ein schwarzes Loch:

              Warum funktioniert:

              $.("#myIframeId").testvar.blah

              Nicht? Irgendwas hab ich da noch nicht kapiert...

              Gruss
              Schorsch

              1. Hi,

                Leider hab ich grad ein schwarzes Loch:

                Hoffentlich hast du noch genug Haare, dass es nicht auf den ersten Blick so auffällt ...

                Warum funktioniert:

                $.("#myIframeId").testvar.blah

                Nicht?

                Bei deinem vorher gezeigten Code?
                Weil dort textvar eine lokale Variable innerhalb einer Funktion ist.

                MfG ChrisB

                --
                “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
                1. Salut

                  Das steht im iframe:

                  $(function(){  
                    
                  	  var testvar = {'blah':'traaa!', 'blih':'hello world'};  
                    
                   });
                  

                  Leider habe ich keinen Schimmer, wie man "von aussen"
                  an die "testvar" rankommt.

                  Firebug tut so, wie wenn's gar nicht existiert.
                  self.iframe... $.("#myIframeId") ... usw. komme nicht weiter.

                  Brauche Hilfe.

                  Gruss!

                  1. Hi,

                    Das steht im iframe:

                    Ja, warum zum Geier, steht's denn da immer noch ...?

                    $(function(){

                    var testvar = {'blah':'traaa!', 'blih':'hello world'};

                    });

                      
                    Dann lass' den Quatsch mit der Funktion doch einfach weg ...  
                      
                    
                    > Brauche Hilfe.  
                      
                    Brauchst Grundlagenkenntnisse.  
                      
                    MfG ChrisB  
                      
                    
                    -- 
                    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
                    
              2. Hi!

                Warum funktioniert:
                $.("#myIframeId").testvar.blah
                Nicht? Irgendwas hab ich da noch nicht kapiert...

                Der erste Punkt muss weg.

                Lo!

          2. Wie komme ich auf die testvar, welche im Iframe
            im jQuery Scope drin definiert wurde?

            Mit jQuery kommst du hier nicht weiter - hier brauchst du JavaScript-Kenntnisse.

            Erstmal definierst du die Variable global, wie gesagt ohne jQuery-Code. Einfach

            <script type="text/javascript>
            textvar = {...};
            </script>

            Aus der Ursprungsseite kommst du am so zur Variable:

            window.frames.FRAMENAME.testvar

            wobei der iframe den entsprechenden Namen tragen muss:

            <iframe name="FRAMENAME"></iframe>

            jQuery hilft dir da nicht weiter - die contents()-Methode gibt einem zwar das document-Objekt des Dokuments in einem iframe, aber du willst das window-Objekt. Denn globale Variablen sind Eigenschaften des window-Objektes.

            Mathias

            1. Erstmal definierst du die Variable global […]

              Oder wirklich extrem global: top.allmende = {...}

  2. Problem:
    Ich erhalte nun das JSON mit falschen Hochkommas:

    {"eins":"blah", "html":"<a href="blah.html" title="blih">"}

    Hallo Schorch,

    auch wenn Dir das nicht weiterhilft, aber die Hochkommas sind richtig und entsprechen der JSON Spezifikation (siehe http://www.json.org/).

    Das Parsen sollte doch eigentlich kein Problem sein.

    MfG

    1. Problem:
      Ich erhalte nun das JSON mit falschen Hochkommas:

      {"eins":"blah", "html":"<a href="blah.html" title="blih">"}

      Hallo Schorch,

      auch wenn Dir das nicht weiterhilft, aber die Hochkommas sind richtig und entsprechen der JSON Spezifikation (siehe http://www.json.org/).

      Nein das stimmt nicht. Schau mal genauer hin

      Struppi.

      1. Hallo Struppi,

        auch wenn Dir das nicht weiterhilft, aber die Hochkommas sind richtig und entsprechen der JSON Spezifikation (siehe http://www.json.org/).

        Nein das stimmt nicht. Schau mal genauer hin

        Struppi.

        meinst Du die fehlenden escapes für die double-quotes innerhalb des a-tag? Dann hast Du Recht, das ist so falsch. Ansonsten weiß ich nicht worauf Du anspielst und bitte um Aufklärung.

        MfG

        1. meinst Du die fehlenden escapes für die double-quotes innerhalb des a-tag? Dann hast Du Recht, das ist so falsch.

          Genau das meinte ich, deine Worte waren: "Das Parsen sollte doch eigentlich kein Problem sein." - was eben deshalb nicht stimmt.

          Struppi.