Hakan: Ajax document.getElementById

Hallo Leute,

ich habe eigentlich eine simple Frage:

Kann es sein, dass der folgende Befehl unter IE nicht funzt?

Ich habe ein kleines Ajax-Skript, wo ich eine PHP-Datei aufrufe und die Rückgabe in ein Select-Feld einfüge.

Leider funzt der Befehl
document.getElementById("friends").innerHTML = xmlHttp.responseText;
nicht unter IE. Unter FireFox sieht alles gut aus.

Wo ist das Problem?

Gruß, Hakan

  1. Hi,

    Wo ist das Problem?

    in Deiner Fehlerbeschreibung. "Funktioniert nicht" funktioniert nicht, und zwar unabhängig davon, ob Du "funktioniert" durch irgendwelche Phantasie-Begriffe ersetzt oder nicht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Leute,

      ich dachte, dass das kein großes Problem sein würde, aber ich poste mal die Skripte komplett rein, in der Hoffnung, dass alles etwas klarer wird.

      Erst mal die index.html
      <html>
      <head>
      <title>PHP Tests</title>
      <script type='text/javascript' src='ajx/ajx.js'></script>
      </head>

      <body>

      <select size='1' onchange='ddm(this.value)' >
      <option>Option 1</option>
      <option>Option 2</option>
      <option>Option 3</option>
      <option>Option 4</option>
      </select>

      <br><br><br>

      <select id='friends' size='1' >
      </select>

      </body>
      </html>

      Sobald ein Element aus dem ersten Select-Feld gewählt wird, soll die Funktion ddm() aufgerufen werden.

      Diese sieht wie folgt aus ajx.js
      // globale Instanz von XMLHttpRequest
      var xmlHttp = false;

      // XMLHttpRequest-Instanz erstellen
      // ... für Internet Explorer
      try {
          xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
      } catch(e) {
          try {
              xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
              xmlHttp  = false;
          }
      }
      // ... für Mozilla, Opera und Safari
      if (!xmlHttp  && typeof XMLHttpRequest != 'undefined') {
          xmlHttp = new XMLHttpRequest();
          xmlHttp.overrideMimeType('text/xml');
      }

      function ddm(grid){

      var url = "php/getFriend.php?grid="+grid;

      xmlHttp.onreadystatechange = function (){
              if (xmlHttp.readyState == 4) {
               if(xmlHttp.status == 200){

      // var friendslist = xmlHttp.responseText;
          var friendslist = "<option>Hallo</option>";
          document.getElementById("friends").innerHTML = friendslist;

      }
              }
          };

      xmlHttp.open('GET', url, true);
          xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
       xmlHttp.send(null);

      }

      Und die PHP-Datei getFriend.php sieht einfachheitshalber wie folgt aus:
      <?php session_start ();

      $grid = $_REQUEST['grid'];

      if($grid == 'Option 1'){
       echo "<option>Option 1</option>";
      }else if($grid == 'Option 2'){
       echo "<option>Option 2</option>";
      }else if($grid == 'Option 3'){
       echo "<option>Option 3</option>";
      }else if($grid == 'Option 4'){
       echo "<option>Option 4</option>";
      }else{
       echo "<option>wunderbar</option>";
      }

      ?>

      Das Problem ist an zwei Stellen, vermute ich:
      1. ich kann mit getElementById nicht auf das zweite Select-Feld zugreifen unter IE. Unter FireFox funzen die Skripte einwandfrei
      Denn in das zwiete Select-Feld wird nichts eingefügt, wenn ich einfach nur ein einfaches String einfüge (wie weiter oben auskommentiert

      2. xmlHttp funzt ebenfalls nicht, denn responseText ist unter IE leer!

      Gruß, Hakan

      1. Hi,

        ich dachte, dass das kein großes Problem sein würde,

        wenn dem so wäre, hättest Du das Problem selbst lösen können.

        aber ich poste mal die Skripte komplett rein, in der Hoffnung, dass alles etwas klarer wird.

        *Zufällig* ist dem so. Poste aber dennoch in Zukunft bitte nur den relevanten Code - das ist der, den Du durch Deine Problemanalyse als relevant erkannt hast. Die Ergebnisse Deiner Analyse sind ebenfalls Pflicht.

        <select id='friends' size='1' >
        </select>
            document.getElementById("friends").innerHTML = friendslist;

        Sehr grob pauschalisiert: Der IE kann allgemeine Funktionen nicht anwenden, wenn er speziellere kennt. Bei <select>-Elementen ist dies der Fall. Verwende die speziellen Methoden, um (einzelne) Option-Objekte hinzuzufügen.

        1. xmlHttp funzt ebenfalls nicht, denn responseText ist unter IE leer!

        Seit Deinem Posting ist weder "funzt" zu einem Wort der deutschen Sprache[1] geworden, noch "funktioniert nicht" zu einer Fehlerbeschreibung oder auch nur einem Ansatz davon.

        Cheatah

        [1] Im Wienerischen gibt es immerhin "Funzen". Es ist ein verächtlicher Ausdruck für "Frau".

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Vielen Dank Cheatah, aber ich würde darum bitte, Dich einfach geschlossen zu halten, wenn Du schon keinen konstruktiven Beitrag leisten kannst!

          Vielen Dank!

          1. Hi!

            Vielen Dank Cheatah, aber ich würde darum bitte, Dich einfach geschlossen zu halten, wenn Du schon keinen konstruktiven Beitrag leisten kannst!

            Du hast gerade einen Fehler gemacht - lies seinen Beitrag doch nochmals und frage ggf. wieder nach, büdde, büdde sei nett!

            off:PP

            --
            "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
            1. Ich wiederhole mich ungern, aber:

              wer das unwahrscheinliche Glück hat, von Cheatah eine Antwort zu bekommen, tut gut daran, sie sorgfältig zu lesen.

              Gruß, LX

              --
              X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: Unusual
              X-Please-Search-Archive-First: Absolutely Yes
              1. Hi!

                Ich wiederhole mich ungern, aber:

                Das ist gelogen, denn sonst hättest Du ja einen Link auf die Zitatsammlung hier plaziert;)

                off:PP

                --
                "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
              2. Die spezielle Funktion von dem Cheatah hier redet ist, einen neuen Eintrag mit "new Option()" erzeugen und diesen dann mit
                document.form.select.option[document.form.select.length] = neuerEintrag;
                einfügen.

                Wobei form natürlich der Name des Formulars ist und select der Name des Auswahlelements.

                Und an alle, die ihre Langeweile hier auslassen:
                Hier wäre jedem geholfen, wenn ihr den Leuten hier expliziter und ohne dumme Sprüche hilft. Oder besser: sucht euch eine Freundin!

                *|Tron|*

                1. Hallo Tron!

                  Oder besser: sucht euch eine Freundin!

                  Wie? Eine für uns alle?

                  Viele Grüße aus Frankfurt/Main,
                  Patrick

                  --

                  _ - jenseits vom delirium - _
                  [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                  Nichts ist unmöglich? Doch!
                  Heute schon gegökt?
                  All'alba vincerò!
                  1. Ne, bei Deinem Namen rate ich Dir eher einen Freund!

                    *|Tron|*

                    1. Hi!

                      Ne, bei Deinem Namen rate ich Dir eher einen Freund!

                      Und mit dir wollte wohl im Kindergarten schon keine(r) spielen, oder?

                      off:PP

                      --
                      "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                    2. Hallo Tron!

                      Ne, bei Deinem Namen rate ich Dir eher einen Freund!

                      Abgesehen davon, dass ich nicht weiß, was dies mit einem Namen anders als Klaus-Detlef oder Jean-Bernard zu tun haben sollte, hätte ich damit unter bestimmten Umständen und von Zeit zu Zeit auch wenig Probleme. Auf Dauer wäre es jedoch nichts für mich.

                      Viele Grüße aus Frankfurt/Main,
                      Patrick

                      --

                      _ - jenseits vom delirium - _
                      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                      Nichts ist unmöglich? Doch!
                      Heute schon gegökt?
                      All'alba vincerò!
                2. Hi!

                  Hier wäre jedem geholfen, wenn ihr den Leuten hier expliziter und ohne dumme Sprüche hilft.

                  Gerne: ich schenke Dir ein 'e', nehme ein 'i'.

                  off:PP

                  --
                  "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
                  1. Hallo Pierre Pan!

                    Gerne: ich schenke Dir ein 'e', nehme ein 'i'.

                    War mir nicht aufgefallen. Dafür dass (laut Deinem letzten Lounge-Posting) Deine Heimat sicher nicht allzu weit von meiner sein sollte, hast Du ein gutes Auge pour les fautes des autres. Comme moi fils d'instituteur/de professeur?

                    Viele Grüße aus Frankfurt/Main,
                    Patrick

                    --

                    _ - jenseits vom delirium - _
                    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                    Nichts ist unmöglich? Doch!
                    Heute schon gegökt?
                    All'alba vincerò!
        2. Hi!

          [1] Im Wienerischen gibt es immerhin "Funzen". Es ist ein verächtlicher Ausdruck für "Frau".

          Wobei ich mir erlaube, darauf hinzuweisen es möge bitte wie 'Funsen' ausgesprochen werden - nicht dass einer der hiesigen Gäste in Wien unangenehm auffällt, wenn er die Kellnerin als 'FunZen' bezeichnet ;)

          off:PP

          --
          "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  2. Hallo,

    wieso machst du es nicht so, dass du eine XML Datei mit der PHP-Seite zurücklieferst?

    Ich habe so etwas letzte Woche auch gebraucht bzw. gebaut:

      
    <selectField>  
       <select>  
         <value>3</value>  
         <description>bla3</description>  
       </select>  
       <select>  
         <value>8</value>  
         <description>bla8</description>  
       </select>  
    </selectField>  
    
    

    Und in Java-Script dann, nachdem du die XML Antwort erhalten hast:

      
    response = req.responseXML.documentElement;  
      
    var selectField = response.getElementsByTagName("select");  
      
    var option = new Option("", "NULL", false, false);  
    raumSelect.options[raumSelect.length] = option;  
      
    for (i = 0; i < raeume.length; i++) {  
       var raumid = raeume[i].getElementsByTagName("value")[0].firstChild.data;  
       var bezeichnung = raeume[i].getElementsByTagName("description")[0].firstChild.data;  
      
       var option = new Option(bezeichnung, raumid, false, false);  
       raumSelect.options[raumSelect.length] = option;  
    }  
    
    

    Habe mit dem Code Räume die einem Standort zugeordnet sind aus der Datenbank per PHP geholt und das Select-Feld das die Räume enthält geleert und dann mit den Räumen gefüllt die dem aktuellen Standort zugeordnet sind.

    Die Methode funktioniert mit dem IE6, IE7 und Firefox.

  3. Höchstwahrscheinlich im kleinen Ajax-Script, welches ich leider in Deiner Fehlerbeschreibung vermisse. Für diesen Fehler gibt es mindestens 4 mögliche Gründe:

    • die Variable xmlHttp ist nicht korrekt mit einem XMLHttpRequest initialisiert (im IE ein ActiveXObject)
    • die Methoden open und/oder send dieses Objekts werden nicht richtig aufgerufen
    • der responseText ist leer
    • das Document-Node mit ID "friends" wird vom IE nicht erkannt, da es eine Funktion des gleichen Namens gibt

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
  4. Hallo Hakan,

    Leider funzt der Befehl
    document.getElementById("friends").innerHTML = xmlHttp.responseText;
    nicht unter IE. Unter FireFox sieht alles gut aus.
    Wo ist das Problem?

    Ich vermute mal, weiter oben. Was ist denn xmlHttp? Hat das mit XMLHttpRequest() zu tun? Dann liegt das Problem dort: der IE kennt XMLHttpRequest() nicht. Für den IE kannst Du alternativ ActiveXObject("Microsoft.XMLHTTP") nehmen.

    Alex