Problem mit AJAX-Script und IE

maeg

Erfahrenes Mitglied
Hi zusammen,

ich kann mir vorstellen, ihr könnt das Thema nicht mehr hören - allerdings hab ich das Forum bereits durchstöbert .. und auch Google wurde am Wochenende zu einem meiner besten Freunde - dennoch habe ich leider keine Antwort gefunden.

HTML:
<html>
    <head>
        <title>Formulare mit Ajax</title>
        <script language="javascript">
            <!--
            var xml = null;
            var timer = 0;
            
            function sendAjaxQuery(datei, insert, delay) {
                if(delay == 0) {
                    sendAjaxQuery2(escape(datei),escape(insert));
                } else {
                    window.clearTimeout(timer);
                    timer = window.setTimeout('sendAjaxQuery2("'+escape(datei)+'","'+escape(insert)+'")', delay);
                }
            }
            
            // Daten abrufen
            function sendAjaxQuery2(datei, insert) {
                datei = unescape(datei);
                insert = unescape(insert);
                if(xml == null) {
                    if(window.XMLHttpRequest) {
                        xml = new XMLHttpRequest();
                    } else if (window.ActiveXObject) {
                        try {
                            xml = new ActiveXObject('Msxml2.XMLHTTP');
                        } catch(e1) {
                            try {
                                xml = new ActiveXObject('Microsoft.XMLHTTP');
                            } catch(e2) { }
                        }
                    }
                }
                
                if(xml != null) {
                    xml.open('GET',datei,true);
                    xml.insert = insert;
                    xml.onreadystatechange = cbAjaxQuery;
                    xml.send(null);
                }
            }
            
            // Response verarbeiten
            function cbAjaxQuery() {
                if(xml.readyState == 4 && xml.status == 200) {
                    eval(xml.insert+" = xml.responseText");
                }
            }
            
            function checkUser(u) {
                var rueckgabe = sendAjaxQuery('ajax_form_user.php?u='+escape(u),'document.getElementById("userspan").innerHTML',300);
            }
            
            //->
            </script>
        </head>
        
        <body>
            
            <form name="form" method="post" action="anmeldung2.php">
                <table>
                    <tr>
                        <td>Username:</td>
                        <td><input type="text" name="login" onkeyup="checkUser(this.value);" onchange="checkUser(this.value);">
                        <span id="userspan"></span></td>
                    </tr>
                    
                    <tr>
                        <td colspan="2"><input type="submit" id="abschicken" value="Abschicken"></td>
                    </tr>
                </table>
            </form>
        </body>
    </html>

Folgendes Script überprüft einfach nach jeder Eingabe, ob der Benutzername in der Datenbank schon vorhanden ist und füllt dann dementsprechend das <span>.

Im Firefox funktioniert es wunderbar. Der Internet Explorer bringt die vielsagende Fehlermeldung "Das Objekt unterstützt diese Eigenschaft oder Methode nicht - Zeile 38".

Weiß da jemand etwas?

Vielen Dank im Voraus!
 
Schalte mal im Internet Explorer die Javascript Konsole ein.


Extras --> Internetoptionen --> einen Haken setzen bei "Scriptfehler anzeigen"
(aus dem Gedächtnis)

Dann sollte eigentlich etwas mehr kommen, als die von Dir beschriebene Fehlermeldung.

Vielleicht magst Du das mal probieren...

VG
Soa
 
Leider kommt nicht mehr - der Haken erwirkt, dass automatisch eine Fehlermeldung vom IE kommt. Ist der Haken nicht gesetzt, muss man immer links unten auf "Fehler" klicken, damit die Meldung angezeigt wird.

Trotzdem danke!
 
Hi,

der IE lässt das XMLHttpRequest-Objekt nicht um Eigenschaften erweitern. Hier tritt auch die Fehlermeldung auf.

Stattdessen könntest du den String insert an die Callback-Funktion weiterreichen.
Code:
// Daten abrufen
function sendAjaxQuery2(datei, insert) {
  datei = unescape(datei);
  // Decodieren wird in der CallbackFunktion durchgeführt
  //insert = unescape(insert);
  if(xml == null) {
    if(window.XMLHttpRequest) {
      xml = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      try {
        xml = new ActiveXObject('Msxml2.XMLHTTP');
      } catch(e1) {
        try {
          xml = new ActiveXObject('Microsoft.XMLHTTP');
        } catch(e2) { }
      }
    }
  }

  if(xml != null) {
    xml.open('GET',datei,true);
    //xml.insert = "test";
    xml.onreadystatechange = function(){cbAjaxQuery(insert);};
    xml.send(null);
  }
}

// Response verarbeiten
function cbAjaxQuery(insert) {
    if(xml.readyState == 4 && xml.status == 200) {
      insert = unescape(insert);
      eval(insert+" = xml.responseText");
    }
}
Vielleicht hilft dir das weiter.

Ciao
Quaese
 
@ Quaese: Vielen Dank! Darauf wäre ich im Leben nicht gekommen!

Script funktioniert jetzt einwandfrei. Fettes, fettes Danke!
 
Zurück