Sie sind nicht angemeldet.

1

Freitag, 23. Oktober 2009, 17:23

Kleines AJAX Einsteiger Tutorial

Hiermit will ich euch eine kleine Einführung in AJAX geben.


Was ist AJAX überhaupt?
AJAX steht für "Asynchronous JavaScript and XML". Das heißt, um neue Daten vom Server herunterzuladen, muss die Seite nicht komplett neu geladen werden, und der komplette Vorgang geschieht im Hintergrund. Später werden die angeforderten Daten per JS und DOM in die aktuelle Seite eingefügt. Beispiele für Seiten, die AJAX benutzen, findet man viele:
Google:

Das XML lassen wir in diesem Tutorial weg, sondern wir übermitteln nur Text.


Eine Anfrage machen
AJAX leitet man in Firefox, Safari, Opera, ... von einem Objektes namens "XMLHTTPRequest" ab. Bei IE ist das ganze ein ActiveX Element, dass wieder von Version zu Version unterschiedlich heißt. *würg*
Hier einmal ein kommentierter Code zum erstellen soeines Objektes

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var httpRequest; //Eine neue Globale Variable deklarieren, in der unser Request Object gespeichert wird
if (window.XMLHttpRequest) { //Exestiert das XMLHttpRequest also ist es Firefox, Safari, ...
    httpRequest = new XMLHttpRequest(); //Ein neuen XMLHttpRequest erstellen
} else if (window.ActiveXObject) { //Wenn ActiveX exestiert ist es IE
    try {
   	 httpRequest = ActiveXObject("Msxml2.XMLHTTP"); //Bei manchen IE Versionen ist es das Objekt
    } catch(e) {
   	 try {
   		 httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); //oder das
   	 } catch(e) {
   	 }
    }
}
if(!httpRequest) { //Wenn es nicht richtig initzalisiert wurde
    alert("Ihr Browser unterstützt leider noch kein AJAX"); //Ist der Browser zu alt ;(
}



Nachdem wir nun das Requestobjekt erstellt haben, können wir mit der Übertragung beginnen.

Um eine Anfrage an den Server zu senden brauchen wir 2 Methoden: open und send.

So versendet man mit POST:

Quellcode

1
2
httpRequest.open("post", "speichern.php"); //Methode post) und Zieladresse
httpRequest.send("vorname=Tim&nachname=mustermann"); //Parameter


Möchte man Parameter mit GET versenden dann macht man das so:

Quellcode

1
2
httpRequest.open("get", "speichern.php?vorname=Tim&nachname=mustermann"); //get, Zieladresse und Parameter einstellen
httpRequest.send(null); //Da bei GET die Parameter direkt in der URL stehen einfach null eintragen

Aber Achtung bei GET: Sollten die URLs nicht korrekt codiert sein, einfach noch die Funktion escape(); benutzen.


Jetzt wissen wir wie man Dateien auf dem Server anspricht, aber noch nicht wie wir die zurück erhaltenen Daten verarbeiten.

Dafür gibt es den Event-Handler onreadystatechange unsers XMLHttpRequest-Objektes. Diesem können wir eine Funktion zuweisen, die immer dann aufgerufen wird, wenn sich der Stratus der Übertragung ändert.
In dieser Funktion können wir dann mithilfe der readyState Eigenschaft prüfen, in welchem Status sich die Übertragung befindet:

Wert | Bedeutung
--|-------------------------------------------------------------------------
0 | Die Methode open wurde noch nicht aufgerufen.
1 | Die Anfrage wurde mit open vorbereitet, aber send noch nicht aufgerufen.
2 | Die Anfrage wurde mithilfe von send gesendet.
3 | Es werden Daten empfangen, aber die Datenübertragung läuft noch.
4 | Die Datenübertragung ist beendet.

Wie man sehen kann ist warscheinlich für die meisten nur der letzte Wert interessant.

Nun aber zum Synatx

Quellcode

1
httpRequest.onreadystatechange = nameOfTheFunction;

wir können direkt eine Funktion so anknüpfen:

Quellcode

1
2
3
httpRequest.onreadystatechange = function() { 
    //Dieser Code wird dann ausgefüht...  
}

oder eine eigene Funktion erstellen:

Quellcode

1
2
3
4
5
httpRequest.onreadystatechange = statehandler;

function statehandler() {
    //Dieser Code wird dann ausgeführt...
}


Ich hoffe ich habs nicht allzuschwer mit dem Event-Handler gemacht...

Um den bekommenden Text auszulesen gibt es die responseText Eigenschaft.

Beispiel:
Um es besser zu verstehen, hier noch ein Beispielcode um die akutelle Uhrzeit zu laden:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<html>
<head>
<script type="text/javascript">
var httpRequest; //Eine neue Globale Variable deklarieren, in der unser Request Object gespeichert wird
if (window.XMLHttpRequest) { //Exestiert das XMLHttpRequest also ist es Firefox, Safari, ...
    httpRequest = new XMLHttpRequest(); //Ein neuen XMLHttpRequest erstellen
} else if (window.ActiveXObject) { //Wenn ActiveX exestiert ist es IE
    try {
   	 httpRequest = ActiveXObject("Msxml2.XMLHTTP"); //Bei manchen IE Versionen ist es das Objekt
    } catch(e) {
   	 try {
   		 httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); //oder das
   	 } catch(e) {
   	 }
    }
}
if(!httpRequest) { //Wenn es nicht richtig initzalisiert wurde
    alert("Ihr Browser unterstützt leider noch kein AJAX"); //Ist der Browser zu alt ;(
}

function statehandler() { //Unsere Funktion, die immer ausgeführt wird, wenn sich der Status ändert
    if (httpRequest.readyState == 4) { //Wenn die Datenübertragung beendet ist, dann ...
   	 var daten = httpRequest.responseText; //Schreibe die empfangenen Daten in eine Variable
   	 document.getElementById("ajax_content").innerHTML = daten; //und schreibe sie in den div
    }
}

function getTime() { //Wir ausgefüht wenn man auf den Button klickt.
    httpRequest.onreadystatechange = statehandler //Keine ()! Event-Handler vorbereiten.
    httpRequest.open("get", "time.php"); //Wir brauchen keine Parameter, weil wir nur Text empfangen
    httpRequest.send(null);
}
</script>
<body>
<div id="ajax_content"></div>
<input type="button" onclick="getTime();" value="Zeit aktualisieren!" />
</body>


Für die "time.php":

Quellcode

1
2
3
<?php
    echo date("d.m.Y H:i:s");
?>


Wenn man nicht grad einen PHP Server hat, dann tut es auch ein einfaches "txt" File zum Testen.



Das wars jetzt aber auch... War mein erstes Tutorial^^. Ich hoffe ihr habt es verstanden und viel Spaß beim Scripten!
Signatur greetz, DarkE

Helfen Sie, die Vielfalt des Amazonas zu bewahren

2

Sonntag, 25. Oktober 2009, 21:49

nice, ich kann zwar nur sehr begrenzt php, aber trotzdem hat es mir für das verständnis von Ajax sehr geholfen!
Signatur
Du möchtest Autoit lernen, aber weißt nicht wo du anfangen sollst? : [ANFÄNGER HIER REIN] Das Erlangen von Autolt Grundwissen

3

Samstag, 14. November 2009, 13:33

Danke dir! sehr hilfreich ! :thumbsup:
Signatur

|| MathMaster³ C++ Console Game ||


Wenn ich dir mit meinem Beitrag geholfen habe , würde ich mich sehr über eine gute Bewertung freuen ;)

Ähnliche Themen