Martin: Kann IE5 keine Daten, die an URL hängen, interpretieren???

Hallo miteinander,
ich möchte Daten aus einem Formular auslesen und per submit an die URL anhängen lassen, damit sie dem Folgedokument zur Verfügung stehen. Diese werden dort benötigt.
Dies funktioniert auch im IE6 und Mozilla1.1 und somit wohl auch im Netscape ab der Version 6.
Da meine kleine Anwendung aber v.a. auch im IE5 laufen soll, meine Frage:
Kann der IE5 noch keine aus Webadresse und Daten zusammengesetzte URL lesen oder liegt es evtl. an meinem Rechner?

Die URL sieht ungefähr folgendermaßen aus:
www.meineseite.de?var1=10&var2=20&var3=30
und so weiter...

Danke schon mal für Eure Antworten.

Grüße
  Martin

  1. Hallo, Martin,

    ich möchte Daten aus einem Formular auslesen und per submit an die URL anhängen lassen, damit sie dem Folgedokument zur Verfügung stehen. Diese werden dort benötigt.

    Fragst du selbige GET-Parameter serverseitig ab (CGI) oder nutzt du JavaScript (wie bspw. in http://forum.de.selfhtml.org/archiv/2002/10/26395/#m144124)?

    Dies funktioniert auch im IE6 und Mozilla1.1 und somit wohl auch im Netscape ab der Version 6.

    Was funktioniert denn nicht im IE5? Zeige uns doch bitte mal dein Formular und erläutere, was du genau vorhast und was schiefläuft.

    Kann der IE5 noch keine aus Webadresse und Daten zusammengesetzte URL lesen oder liegt es evtl. an meinem Rechner?

    Doch und nein, wahrscheinlich nicht. Der Internet Explorer 5 unterstützt GET-Parameter problemlos, schon Mosaic tut dies AFAIK. Der Browser formuliert jedoch meist nur eine Anfrage mit den Parametern, meist liest man diese Parameter dann über ein serverseitiges Programm/Skript aus. Insofern interpretiert *kein* Browser die GET-Parameter, wenn der Browser die Anfrage nicht selbst formuliert (bei einem GET-Formular), von JavaScript natürlich angesehen.

    Die URL sieht ungefähr folgendermaßen aus:
    www.meineseite.de?var1=10&var2=20&var3=30

    Genau, da fehlt nur ein Strich zwischen Domainname und Query String (beginnend mit "?"), aber dein Formular mit action="http://www.meineseite.de"  und method="get" dürfte dies automatisch handhaben, beziehungsweise der Browser sollte es erkennen.

    Grüße,
    Mathias

    1. Hallo Mathias,
      vielen Dank für Deine ausführliche Antwort!!

      ich möchte Daten aus einem Formular auslesen und per submit an die URL anhängen lassen, damit sie dem Folgedokument zur Verfügung stehen. Diese werden dort benötigt.

      Fragst du selbige GET-Parameter serverseitig ab (CGI) oder nutzt du JavaScript (wie bspw. in http://forum.de.selfhtml.org/archiv/2002/10/26395/#m144124)?

      Ich nutze ausschließlich JavaScript, da Server-seitig überhaupt nichts passieren soll (so die Anforderungen).

      Dies funktioniert auch im IE6 und Mozilla1.1 und somit wohl auch im Netscape ab der Version 6.

      Was funktioniert denn nicht im IE5? Zeige uns doch bitte mal dein Formular und erläutere, was du genau vorhast und was schiefläuft.

      Also: Erst mal noch eine Erläuterung:
      Ich habe eine HTML-Seite mit einem Formular mit Eingabefeldern. Diese werden vom Benutzer mit Eingaben gefüllt. Auf den Vorgängerseiten, wo das nur mit "GET" bzw. action="folgeseite.htm" gelöst ist, funktioniert das auch wunderbar.
      Für die jetzige Seite habe ich allerdings eine Seite, auf der nur eine Radiogroup im Formular steht, aus der eine Variante ausgewählt werden soll. In versteckten Feldern stehen die Werte von den Vorgängerseiten, die sich je nach Auswahl des Radio`s noch ändern.
      Per submit sollen nun diese veränderten Werte an die URL gehängt werden.

      Um zu überprüfen, ob überhaupt ein Radio ausgewählt wurde, habe ich folgende Funktion an das action-Attribut des Formulars angehängt:

      <form name="schritt4" method="GET" target="_self" onSubmit=""
        action="javascript:getURL()">

      Die Funktion getURL() soll überprüfen, ob ein RadioButton ausgewählt wurde, indem überprüft wird, ob in das versteckte Feld URL bereits ein Eintrag vorgenommen wurde.
      Die Funktion getURL() ist wie folgt aufgebaut:

      function getURL()
        {
          if(document.schritt4.URL.value != "")
          {
            self.location.href=document.schritt4.URL.value;
          }
          else { alert("Bitte treffen Sie eine Auswahl"); }
        }

      Das Feld URL ist ein im Formular enthaltenes verstecktes Feld, in das die URL mitsamt Übergabeparametern gespeichert wird, wie es die folgende Funktion machen soll:
      Anmerkung: Diese Funktion ist in der Funktion zu den jeweiligen Radio-Buttons realisiert, da ja unterschiedliche Werte pro Radiobutton errechnet werden und auf die Folgeseite übergeben werden sollen.

      (...)
      //setze Sprungadresse
      var passed = "../shared/passed/schritt5.htm"; //hier wird das Sprungziel für den bestandenen Test definiert
      var failed = "../shared/failed/schritt5.htm";
      var para = "?AV="+AV+"&AN="+AN+"&qpmax="+qpmax+"&Qpmax="+Qpmax+"&qP="+qP+"&QTW="+QTW+"&A="+A+"&V="+V+"&qH="+qH+"&Anl="+Anl+"&QH="+QH+"&ep="+ep;
      //hier werden die einzelnen Variablen als String-Teil gespeichert

      if (qP < Qpmax)
      {
         document.schritt4.URL.value = passed+para; //hier wird die Zieladresse aus Zieldokument und angehängten Parametern bestimmt
      }
      else
      {
         document.schritt4.URL.value = failed+para;
      }

      erneut meine Frage:

      Kann der IE5 noch keine aus Webadresse und Daten zusammengesetzte URL lesen oder liegt es evtl. an meinem Rechner?

      Doch und nein, wahrscheinlich nicht. Der Internet Explorer 5 unterstützt GET-Parameter problemlos, schon Mosaic tut dies AFAIK. Der Browser formuliert jedoch meist nur eine Anfrage mit den Parametern, meist liest man diese Parameter dann über ein serverseitiges Programm/Skript aus. Insofern interpretiert *kein* Browser die GET-Parameter, wenn der Browser die Anfrage nicht selbst formuliert (bei einem GET-Formular), von JavaScript natürlich angesehen.

      d.h. ich muss eine andere Lösung finden? Wie könnte ich sowas denn dann realisieren?

      Die URL sieht ungefähr folgendermaßen aus:
      www.meineseite.de?var1=10&var2=20&var3=30

      Genau, da fehlt nur ein Strich zwischen Domainname und Query String (beginnend mit "?"), aber dein Formular mit action="http://www.meineseite.de"  und method="get" dürfte dies automatisch handhaben, beziehungsweise der Browser sollte es erkennen.

      Was meinst Du mit "Strich"? Das ist doch genau die Adresszeile, die vom IE dann angezeigt wird.

      Danke nochmal und viele Grüße
         Martin

      1. Hallo, Martin,

        Also: Erst mal noch eine Erläuterung:
        Ich habe eine HTML-Seite mit einem Formular mit Eingabefeldern. Diese werden vom Benutzer mit Eingaben gefüllt. Auf den Vorgängerseiten, wo das nur mit "GET" bzw. action="folgeseite.htm" gelöst ist, funktioniert das auch wunderbar.

        Dort hat auch der Browser anhand des Formulars und deren Eingabefeldern den GET-Request formuliert.

        Angenommen ein Formular sieht folgendermaßen aus:
        <form action="murks.html">
        <p><input name="xyz" value="123" /><input name="abc" value="456" /></p>
        </form>
        Dann sieht der vom Browser formulierte GET-Request (in der URL übergebene Parameter) so aus:
          murks.html?xyz=132&abc=465
        (Das dürfte dir bekannt sein, für den Fall dass nicht, habe ich es noch einmal erläutert. :))

        Für die jetzige Seite habe ich allerdings eine Seite, auf der nur eine Radiogroup im Formular steht, aus der eine Variante ausgewählt werden soll.

        Folglich gilt es, den selektierten Wert der Radiogroup auszulesen, nehme ich an, um selbigen an die URL zu hängen, nehme ich an.

        In versteckten Feldern stehen die Werte von den Vorgängerseiten

        Wie liest du die per GET übergebenen Parameter aus, um sie erneut per JavaScript zu einer neuen URL zu verwursten? Verwendest du eine Funktion wie ich sie in dem Link vorgestellt hatte?

        die sich je nach Auswahl des Radio`s noch ändern.

        Häh? ;) Ich dachte selbiger Wert soll auf die Folgeseite übergeben werden, wie kann denn nun die vorherige Seite darauf Auswirkungen haben... konstruierst du die komplette Radiogroup auch dynamisch? Möglich wäre es ohne weiteres.

        Per submit sollen nun diese veränderten Werte an die URL gehängt werden.

        Gut, aber dies hat nichts mit dem Absenden des Formulars zu tun. Der Benutzer drückt zwar den Submit-Button, aber das Formular selbst darf in seiner Funktion als GET-Formular nicht ausgeführt werden, stattdessen muss eine JavaScript-Funktion ausgeführt werden.

        Um zu überprüfen, ob überhaupt ein Radio ausgewählt wurde, habe ich folgende Funktion an das action-Attribut des Formulars angehängt:
          <form name="schritt4" method="GET" target="_self" onSubmit=""
          action="javascript:getURL()">

        Argh, es könnte problematisch sein, einen javascript:-Link im action-Attribut zu verwenden. Ich habe das schon öfters gesehen, meines Erachtens ist dies jedoch falsch oder es sollte zumindest vermieden werden. Hier würde ich in jedem Fall onsubmit="getURL(); return false" benutzen anstatt action="javascript:getURL()".
        Du willst offensichtlich die Funktionalität des Formulars ausschalten, das dürfte mit return false erreicht werden können. Das action-Attribut lässt du leer. Die method="get" und target="_self" sind dann völlig unwichtig und können gestrichen werden, da sie nur Wirkung haben, wenn das Formular wie gewohnt abgesendet wird.

        Die Funktion getURL() soll überprüfen, ob ein RadioButton ausgewählt wurde, indem überprüft wird, ob in das versteckte Feld URL bereits ein Eintrag vorgenommen wurde.

        Huch, wie geht das denn? Meintest du, ob ein Radiobutton auf der vorigen Seite ausgewählt wurde, dessen Wert dann per JavaScript an die URL gehängt wurde? Sehr kompliziert, das zu verstehen... Wenn du überprüfen möchtest, ob ein Radiobutton im gegenwärtigen Formular ausgewählt ist, musst du mit http://selfhtml.teamone.de/javascript/objekte/elements.htm#checked arbeiten, aber ich bin mir nicht sicher, ob es dir darum geht, auch wenn ich es oben schon angenommen habe.

        Die Funktion getURL() ist wie folgt aufgebaut:
          function getURL()
          {
            if(document.schritt4.URL.value != "")
            {
              self.location.href=document.schritt4.URL.value;
            }
            else { alert("Bitte treffen Sie eine Auswahl"); }
          }

        Darin sehe ich soweit keine Fehler.

        Das Feld URL ist ein im Formular enthaltenes verstecktes Feld, in das die URL mitsamt Übergabeparametern gespeichert wird, wie es die folgende Funktion machen soll:

        Aha, aber wieso wird mit versteckten Eingabefeldern gearbeitet, wenn doch das Formular sowieso nicht als Übergabemethode genutzt wird... eine globale JavaScript-Variable würde ausreichen, um einen String zwischenzuspeichern.

        Anmerkung: Diese Funktion ist in der Funktion zu den jeweiligen Radio-Buttons realisiert, da ja unterschiedliche Werte pro Radiobutton errechnet werden und auf die Folgeseite übergeben werden sollen.

        ...achso! Die Radio-Buttons sind mit einem onclick versehen, woraufhin dem versteckten Eingabefeld eine bestimmte URL zugewiesen wird, welche beim "Absenden" des Formulars angewählt werden soll. Sehe ich das richtig?
        Wieso aber braucht man diese Brücke? Selbige Funktion könnte auch *einmal* beim Absenden des Formulars (bzw. beim self.location.href-Aufruf) ausgeführt werden... nun gut, ich möchte dir nicht in deine Organisation hineinreden, es dürfte auch so funktionieren. Für gewöhnlich entscheidet sich der Benutzer nicht mehrfach um. *fg*

        (...)
        //setze Sprungadresse
        var passed = "../shared/passed/schritt5.htm"; //hier wird das Sprungziel für den bestandenen Test definiert
        var failed = "../shared/failed/schritt5.htm";
        var para = "?AV="+AV+"&AN="+AN+"&qpmax="+qpmax+"&Qpmax="+Qpmax+"&qP="+qP+"&QTW="+QTW+"&A="+A+"&V="+V+"&qH="+qH+"&Anl="+Anl+"&QH="+QH+"&ep="+ep;
        //hier werden die einzelnen Variablen als String-Teil gespeichert
        if (qP < Qpmax) {
           document.schritt4.URL.value = passed+para; //hier wird die Zieladresse aus Zieldokument und angehängten Parametern bestimmt
        } else {
           document.schritt4.URL.value = failed+para;
        }

        All das dürfte problemlos funktionieren, wie ich das beurteilen kann. Wie gesagt, das Ablegen in einem versteckten Eingabefeld halte ich entsprechend meinem Verständnis für nicht notwendig.

        Kann der IE5 noch keine aus Webadresse und Daten zusammengesetzte URL lesen oder liegt es evtl. an meinem Rechner?

        Doch und nein, wahrscheinlich nicht. Der Internet Explorer 5 unterstützt GET-Parameter problemlos, schon Mosaic tut dies AFAIK. Der Browser formuliert jedoch meist nur eine Anfrage mit den Parametern, meist liest man diese Parameter dann über ein serverseitiges Programm/Skript aus. Insofern interpretiert *kein* Browser die GET-Parameter, wenn der Browser die Anfrage nicht selbst formuliert (bei einem GET-Formular), von JavaScript natürlich angesehen.

        d.h. ich muss eine andere Lösung finden? Wie könnte ich sowas denn dann realisieren?

        Nein, es dürfte auch mit diese Lösung gehen. Ich hatte dich missverstanden. Ich weiß zwar nicht, wie du die GET-Parameter mit JavaScript aus der URL ausliest, um sie dann als Parameter in eine neue URL einzusortieren ("?AV="+AV+"&AN="+AN+"&qpmax="+qpmax usw.), aber dazu habe ich dir ja eine Beispielfunktion verlinkt und scheinbar wendest du etwas ähnliches auch an.

        Wenn dir das gelingt dürfte es ohne weiteres möglich sein, GET-Anfragen mit JavaScript zusammenzubauen, das wird ja in dem von dir geposteten Code vorgemacht. Ich denke eher, der Fehler liegt in der Abfrage des Radiobuttons oder er tritt beim Pseudo-Absenden des Formulars auf.

        www.meineseite.de?var1=10&var2=20&var3=30
        Genau, da fehlt nur ein Strich zwischen Domainname und Query String (beginnend mit "?")
        Was meinst Du mit "Strich"? Das ist doch genau die Adresszeile, die vom IE dann angezeigt wird.

        Ich meinte den Slash nach der Domain: www.meineseite.de/?var1=10&var2=20&var3=30. Aber da die mit JavaScript konstruierten URLs sowieso relativ sind (../shared/passed/schritt5.htm?var1=10 usw.), dürfte das kein Problem darstellen.

        Irgendwie habe ich immer noch nicht verstanden, wie du genau alles löst, ich finde aber in den von dir beschriebenen Methoden (soweit wie ich sie nachvollziehen kann) keinen Fallstrick für IE5.
        Zur Fehlersuche würde ich dir empfehlen, haarklein jeden ausgelesenen Wert und natürlich im Endeffekt die zusammengesetzte URL mit alert() auszugeben, damit du eventuelle Unterschiede und Abweichungen erkennen kannst.

        Was genau schlägt denn fehl, wie verhält sich IE5, an welcher Stelle tritt das Problem auf, werden evtl. JavaScript-Interpreterfehler angezeigt?

        Grüße,
        Mathias