Reiner Miericke: Status einer db-query in separatem frame

Hallo zusammen

kann mir jemand bei folgender Fragestellung weiterhelfen?

Ich habe ein frameset bestehend aus drei frames

  • Frame 1: enthält form zur Spezifikation einer query
  • Frame 2: zeigt die Ausgaben der query an
  • Frame 3: Soll Status-Informationen wie Fehler und/oder
               Anzahl Treffer (Datensätze) der query anzeigen

Auf dem server wird über die form ein perl-Skript angestossen, dass mittels DB-Zugriffe (DBI/postgres)
die in Frame 2 anzuzeigenden Daten liefert. Das funktioniert auch.
Aber wie bekomme ich Fehlermeldungen und andere Statusinformationen in dem frame 3 dargestellt?

Bin für Hinweise dankbar!

Gruß
Reiner

  1. echo $begrueszung;

    Aber wie bekomme ich Fehlermeldungen und andere Statusinformationen in dem frame 3 dargestellt?

    Ich denke, dass man es so lösen könnte: Frame 2 schreibt per Javascript das Dokument inklusive Fehlermeldungen für Frame 3.

    Oder Frame 2 greift per Javascript auf ein bestimmtes Element (getElementById) zu und versorgt es mit neuem Inhalt.

    Wäre das was?

    echo "$verabschiedung $name";

    1. Hallo

      erst einmal vielen Dank für die Antwort.
      Allerdings ist mir das beschriebene Verfahren nicht
      klar. Heißt das, alle Statusmeldungen werden erst
      einmal in Frame 2 dargestellt und dann mittels eine
      JavaScript Programms nach Frame 3 dupliziert?
      Wie soll das aussehen?

      Gruß
      Reiner

      Ich denke, dass man es so lösen könnte: Frame 2 schreibt per Javascript das Dokument inklusive Fehlermeldungen für Frame 3.

      Oder Frame 2 greift per Javascript auf ein bestimmtes Element (getElementById) zu und versorgt es mit neuem Inhalt.

      1. echo $begrueszung;

        Allerdings ist mir das beschriebene Verfahren nicht
        klar. Heißt das, alle Statusmeldungen werden erst
        einmal in Frame 2 dargestellt und dann mittels eine
        JavaScript Programms nach Frame 3 dupliziert?

        "Dargestellt" werden sollen die Meldungen in Frame 2 nicht. Du erzeugst ja den Inhalt für Frame 2 mit einer serverseitigen Programmiersprache. Diese müsste zu dem HTML-Zeug auch einen Javascript-Bereich erzeugen, der den Browser dazu animiert den Frame 3 zu schreiben oder etwas darin zu verändern.

        Frame 3:
        ...<div id="meldungen"></div>...

        Frame 2:

        ...  
        <script type="text/javascript">  
        [code lang=javascript]  
        function statusmeldungen() {  
          var meldungen = 'Hier stehen die <strong>Meldungen<\/strong>';  
          parent.NameDesFrames3.document.getElementById('meldungen').innerHTML = meldungen;  
        }
        

        </script>
        ...
        <body onload="statusmeldungen()">
        [/code]

        Sowas in der Art halt...

        echo "$verabschiedung $name";

        1. Hallo Ralf

          ich glaube die Idee soweit verstanden zu haben.
          Das server-seitig generierte html_Dokument
          enthält bei mir dann folgendes Fragment:

            
          <html>  
              <head><title>Tabelle</title>  
            
                  <script type="text/javascript">  
                      function statusmeldungen() {  
                        var meldungen = 'Hier stehen die <strong>Meldungen<\/strong>';  
                        parent.status.document.getElementById('meldung').innerHTML = meldungen;  
                      }  
                  </script>  
            
              </head>  
              <body onLoad="statusmeldungen()">  
          
          

          Frame 3 hat also bei mir das Attribute name="status"
          und in Frame 2 (mittels src=...):

            
              <body>  
                  <div id="meldung">Irgendein TEXT</div>  
            
              </body>  
          
          

          Und nach Laden von Frame 2 sollte dann "Irgendein Text" gegen die erzeugte Meldung ausgetauscht werden.

          Schöne Idee!

          Allerdings hakt es noch irgendwo.
          Der Text wird nicht ausgetauscht.
          Vermutlich wird das Element nicht gefunden.

          Gruß
          Reiner

          1. echo $begrueszung;

            parent.status.document.getElementById('meldung').innerHTML = meldungen;

            
            >   
            > Vermutlich wird das Element nicht gefunden.  
              
            Doch schon, nur das falsche :-)  
              
            "status" ist die Statuszeile.  
            Nimm mal einen anderen Namen [1] für das Frame oder eine [alternative Schreibweise](http://de.selfhtml.org/javascript/objekte/frames.htm#allgemeines).  
              
              
            echo "$verabschiedung $name";  
              
            [1] Ich denke, es sollte reichen, das erste S groß zu schreiben.
            
            1. parent.status.document.getElementById('meldung').innerHTML = meldungen;

                
              OK, habe Namensänderungen durchgeführt.  
              Das Statusframe heisst nun querystatus und das  
              sich darin befindende Element hat die ID meldung.  
                
              Bei allen folgenden Konstruktionen bekomme ich in  
              der JavaScript Konsole die Meldung "permission denied to get property Window.meldung" bzw "... Window.getElementById":  
                
              

              top.frames[2].meldung.innerHTML = meldtext;
              top.frames[2].getElementById('meldung').innerHTML = meldtext;
              top.querystatus.document.getElementById('meldung');
              parent.querystatus.document.getElementById('meldung');

                
              Was kann denn das bedeuten?  
                
              Gruß  
              Reiner  
              
              
              1. echo $begrueszung;

                Bei allen folgenden Konstruktionen bekomme ich in
                der JavaScript Konsole die Meldung "permission denied to get property Window.meldung" bzw "... Window.getElementById":

                top.frames[2].meldung.innerHTML = meldtext;
                top.frames[2].getElementById('meldung').innerHTML = meldtext;
                top.querystatus.document.getElementById('meldung');
                parent.querystatus.document.getElementById('meldung');

                
                >   
                > Was kann denn das bedeuten?  
                  
                Tut mir leid, da muss ich passen.  
                Liegt es vielleicht daran, dass die [Frame-Seiten auf unterschiedlichen Domains liegen](http://groups.google.de/groups?hl=de&lr=&threadm=3faefe35%240%249224%24afc38c87%40news.optusnet.com.au&rnum=1&prev=/groups%3Fq%3Dpermission%2520denied%2520to%2520get%2520property%2520%26hl%3Dde%26lr%3D%26sa%3DN%26tab%3Dwg)?  
                  
                  
                  
                echo "$verabschiedung $name";
                
                1. Hallo dedlfix

                  Tut mir leid, da muss ich passen.
                  Liegt es vielleicht daran, dass die Frame-Seiten auf unterschiedlichen Domains liegen?

                  Diese Interpretation habe ich auch schon im Netz gelesen.
                  Aber server und client sind auf dem gleichen Rechner.
                  Und soll das heissen, dass ansonsten ein solches
                  Verfahren gar nicht anwendbar ist? Das wäre fatal!

                  Gruss
                  Reiner

                  1. echo $begrueszung;

                    Und soll das heissen, dass ansonsten ein solches
                    Verfahren gar nicht anwendbar ist? Das wäre fatal!

                    Das würde ich nicht behaupten wollen. Ich hab grad erfolgreich ein

                    <div id="testid">foo</div>

                    in <frame name="frame2" ...> mittels

                    <div onclick="parent.frame2.document.getElementById('testid').innerHTML = 'bar'">mach bar</div>

                    geändert.

                    echo "$verabschiedung $name";

                    1. Nachtrag: Im FF getestet, den du auch verwendest, wenn ich richtig vermute.

                      1. Ja, ich teste z.Z. mit FireFox, Mozilla und Konqueror.

                        Da es bei dir funktioniert, bei mir aber nicht
                        muss irgend ein kleiner Unterschied existieren.
                        Da ich dir nicht die Arbeit zumuten möchte, die
                        sourcen zu vergleichen: Kannst du mir dein Testprogramm
                        zukommen lassen? Ich könnte dann testen, ob dieses auch
                        hier funktioniert und gegebenenfalls nach Unterschieden
                        fahnden.

                        Gruss
                        Reiner

                        1. OK, habe dein Beispiel erfolgreich testetn können.
                          Jetzt bin ich etwas ratlos und werde erst einmal
                          aller im Detail vergleichen.

                          Danke
                          Reiner