In: Programmieren Von: spocket
20 Feb 2006Alle schreiben über Ajax, jeder verwendet es und überhaupt, es ist das Tollste, was die Welt momentan zu bieten hat. Grund genug sich auch diesem Hype anzuschließen und sich alles mal genauer und praktischer anzuschauen.
Zur Begriffsklärung: Es geht nicht um Putzmittel und auch nicht um Fussballer aus Amsterdam. Nein, es geht um Programmieren und Webentwicklung. Bezeichnet wird damit ein Konzept zum Austausch von Daten zwischen Browser und Server.
Normalerweise gibt man Daten auf einer Website ein (z.B. einen Kommentar für mein Blog), dieser wird dann an den Server geschickt und der schickt die komplette Internetseite mit den geänderten Daten zurück - dauert laaaange.
Ajax (Asynchronous JavaScript and XML) geht einen anderen Weg. Mit JavaScript werden die Daten an den Server geschickt, dieser schickt dann eine XML-Datei mit den neuen Daten zurück und dann kommt wieder JavaScript ins Spiel, um diese Daten in die Internetseite einzufügen. Asynchron heißt flapsig gesagt, dass man zwischen Abschicken und Empfangen nicht Kaffee trinken muss, sondern weiter rumklicken darf. Dadurch wird alles viel flüssiger, besser, toller zu bedienen und überhaupt ... lieb haben wir uns sowieso
Mein Ziel: Die Bilder in meiner Gallery sollten auf diese Weise bewertet werden können. Wer nicht Informatik studiert, will sich das vermutlich nur anschauen, Bilder bewerten und danach was anderes machen. Für alle anderen beschreibe ich noch, was ich da genau veranstaltet habe.
Zuerst braucht man etwas am Server, das die Aktion ausführt. Die Daten die über Ajax verschickt werden kommen über die bekannten Wege (GET oder POST - es ist ja normale HTTP-Kommunikation) beim Server an. Man kann also ganz normal php programmieren. Die Routinen für das speichern der Bewertung hab ich mir aus den Quellen der Gallery zusammengesucht. Einziger Unterschied zu ner normalen Webseite...es wird ein kleines XML-Dokument erzeugt.
Auf der Clientseite ist es etwas komplexer, weil hier die Hauptarbeit geschieht. Aber wenn man erstmal durchblickt, dann geht es ganz gut. Zuerst braucht man ein XMLHttpRequest-Objekt, der Dreh- und Angelpunkt von Ajax.
Das hier ist die beispielhafte Instantiierung für Mozilla & Co. Mit Browserweiche macht man die Seite auch fit für alle neueren Browser. Den Code dafür findet man z.b. auf dieser Seite.
Ein HTML-Formular wo man einen Wert wählen kann und einen Knopf zum Abschicken hat, dürfte jeder bauen können. Wenn nicht freut sich SelfHTML über einen Besuch. Erwähnenswert ist die erste Zeile:
action gibt's nicht, weil wir ja keinen normalen Postback haben wollen. name, dass wir nachher das Formular in Javascript finden und auslesen können. onsubmit wird ausgeführt, wenn man auf Abschicken drückt. Wichtig ist das return false;. Ohne dieses würde zusätzlich ein Postback (den wir ja grade nicht haben wollen) ausgeführt werden.Und nun kommen wir zur zentralen Methode, die auch wirklich Ajax macht: bewertemitajax(id):
onreadystatechange gibt eine Funktion an, die aufgerufen wird, wenn der asynchrone Transfer fertig ist. Hier ist es als anonyme Funktion (vielleicht aus Java bekannt) implementiert. Man kann auch einfach einen Funktionsnamen angeben.send alles abgeschickt, wobei als Parameter die richtig codierten Daten angegeben werden.xmlHttp.responseXML ein Objekt des DOM-Baums, dem man mit den JavaScript-üblichen Funktionen Informationen entlocken kann. Diese Informationen bastelt man dann noch an die richtigen Stellen (am besten man markiert die über ID's) im DOM-Baum der Seite und fertig ist man.So, ich hoffe das war jetzt einigermaßen verständlich. Abschließend noch ein kleiner Änderungslog: Ich hab eine neue php-Datei erstellt, in der die Funktionalität am Server implementiert ist (ajax.php). Der Javascript-Code wurde in die bestehende Template-Datei rate_form.html gepackt. Diese zwei Dateien hab gibt's als ZIP-Archiv zum Download. Im Template details.html muss noch ein id="vote_anzeige" dort eingefügt werden, wo die aktuelle Bewertung eines Bildes erscheinen soll.
Das war's und bitte keine Kommentare zu meinem Programmierstil
Ich bin Sebastian (30) und das ist mein Blog. Ein spezielles Thema gibt es nicht, aber ich kann wohl behaupten, dass es oft um Bilder geht. Dazu empfehle ich auch meine Gallery zu besuchen.
1 Antwort to Ajaxify your 4Images-Gallery
Sebi
February 20th, 2006 at 22:50
Schick gemacht. Ich hab mich noch nicht getraut eine bestehende seite durch AJAX aufzuwerten, bisher ist es bei neu schreiben geblieben… Vielleicht wirds ja beim Photoblog was.