Erzeugen des Ajax Request Objekts


     try{
         req = new XMLHttpRequest();
     }
     catch (e){
        try{
             req = new ActiveXObject("Msxml2.XMLHTTP");
         }
        catch (e){
           try{
               req = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (failed){
                req = null;
            }
         } 
      }

In diesem Abschnitt wird das XMLHttpRequest Objekt angelegt. Seit der Version 7 ist dieses auch im Internet Explorer von Microsoft verfügbar. Vorher in der Version 5 und 6 gab es im IE dieses Objekt nicht, es gab jedoch ActiveXObject("Msxml2.XMLHTTP"); bzw. ActiveXObject("Microsoft.XMLHTTP"); die die gleiche Funktionalität über sogar gleichnamige Methoden bereitstellt.

Aus Gründen der Kompatibilität zu diesen Versionen sollte man also diese Struktur verwenden. Das bedeutet beim IE 5 und 6 dass mit "new XMLHttpRequest();" bewusst eine Exception ausgelöst wird und im catch Block dann für den IE das Objekt angelegt wird.

Unter folgender Url ist eine Spezifikation des XMLHttpRequest Objekts des W3C zu finden:


http://www.w3.org/TR/XMLHttpRequest/


Auslösen eines asyncronen Requests

req.open("GET", 'http://localhost/ajax-tutorial/eins/test.txt', true);

Über die Methode open wird ein neuer Request erzeugt. Diese Methode hat folgende Parameter:
  • "GET" es handelt sich um einen HTTP GET Request, dazu später mehr.
  • An die Url "http://localhost/ajax-tutorial/eins/test.txt" soll der Aufruf gerichtet sein. Standardmässig ist beim Firefox z.b. nur ein Aufruf einer Adresse möglich die sich unterhalb der gleichen Url wie das Aufrufende Skript befindet.
  • "true" Dieser Parameter sagt, dass dieser Request asyncron ausgeführt werden soll.

Definition einer Callback Funktion


  req.onreadystatechange = function(){            
      switch(req.readyState) {
        case 4:
        if(req.status!=200) {
            alert("Fehler:"+req.status);
        }else{   
            alert(req.responseText);
            //schreibe die antwort in den div container mit der id content
            document.getElementById('eins').innerHTML = '<strong>'+
                                                    req.responseText
                                                    +'</strong>';
        }
        break;

        default:
            return false;
        break;     
    }
  };

Mit dem Attribut onreadystatechange wird eine Funktion festgelegt, die aufgerufen wird, wenn der request seinen readyState (abschlussStatus) ändert, z.b. wenn er erfolgreich abgeschlossen wurde. In diesem Fall wird mit function(){} eine anonyme Funktion erstellt.

Zunächste wird in dieser Funktion der readyState geprüft ob er den gewünschten Wert 4 hat. Laut der W3C spezifikation gibt es 5 Stati:

http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest-members

Innerhalb des Falls 4 (abgeschlossener Transfer) wird nun geprüft ob der HTTP Statuscode den Wert 200 hat. 200 steht für eine Erfolgreiche Übertragung.

Die HTTP Statuscodes findet man ebefalls auch beim W3C:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

 Wenn alles erfolgreich gelaufen ist wird das Resultat der Abfrage (req.responseText) in das Element mit der id "eins" geschrieben.

Header und Daten senden

 req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.send(null);

In diesem Bereich werden Felder des HTTP Headers gesetzt. Da keine Daten gesendet werden, ist auch bei send nichts zum senden vorhanden.

Der HTML Inhalt

    <body>
        <div id="eins" style="width: 80%; height: 80%; border: dashed 1px;">
            <input type="button" onclick="doIt();" value="Mach was!"/>
        </div>
    </body>

Im body des HTML Dokuments befindet sich lediglich ein div Container, in diesem Div Container befindet sich ein Button, der die JavaScript Funktion doIt(); bei einem Klick ausführt.
Workshop Navigation<<>>

Suche

 

Anzeige


Links