« »

AJAX Kommunikation ohne Fassaden Pattern

25. März 2009 Roland

Dieser Artikel ist Teil 20 von 26 der Artikelserie Programmieren

Du möchtest mit JavaScript eine asynchrone Kommunikation mit dem Webserver durchführen. Das möchtest du tun um zum Beispiel die aktuellen Fußballergebnisse, ohne einen Reload Button drücken zu müssen, immer wieder darzustellen. Oder du möchtest einen Chat programmieren und da wäre es doch auch vernünftig, wenn dich dass System immer wieder informieren würde wenn dein Chatpartner etwas von sich gegeben hat.

Um mit dem Server kommunizieren (oder auf gut Schwäbisch schwätze) zu können, müssen wir uns ein XMLHttpRequest Objekt für Firefox, Safari usw. erzeugen und für IEs brauchen wir ein ActiveXObject. Weiterhin müssen wir eine Callback Funktion an dieses XMLHttpRequest oder ActiveXObject anbinden um die Rückmeldung des Servers verarbeiten zu können.

Ein möglicher Code könnte ungefähr so aussehen:

// Globale Variable mit der des Gschwätz (die Kommunikation)
  1. // mit dem Webserver verwaltet wird.
  2. var serverRequest;
  3. // Diese Konstante gibt an, dass die Kommunikation mit
  4. // dem Webserver erfolgreich beendet wurde.
  5. var READY_STATE_COMPLETE=4;
  6.  
  7. /**
  8.  * Initialisiert das serverRequest Objekt um überhaupt
  9.  * mit dem Server reden zu können.
  10.  * Ich habe diese Art im Buch Ajax in Action gefunden.
  11.  * Mir selbst gefällt diese Initialisierung mehr als die sonst
  12.  * übliche try-catch Vorgehensweise wie beispielsweise unter
  13.  * <a href="http://www.admin-wissen.de/eigene-tutorials/webentwicklung/ajax-tutorial/einfuehrung-in-ajax/">Einführung in Ajax</a> beschrieben.
  14.  */
  15. function initXMLHTTPRequest(){
  16.     var request = null;
  17.     if(window.XMLHttpRequest){
  18.         request = new XMLHttpRequest();
  19.     }else if (window.AcitiveXObject()){
  20.         request=new ActiveXObject("Microsoft.XMLHTTP");
  21.     }
  22.     return request;
  23. }
  24.  
  25. /**
  26.  * Hiermit senden wir unseren Request vom Client an den Server.
  27.  */
  28. function sendRequest(url, params){
  29.     serverRequest=initXMLHTTPRequest();
  30.     if(serverRequest){
  31.         // Wir müssen angeben welche Funktion mit den Daten
  32.         // des Webservers umgehen soll.
  33.         serverRequest.onreadystatechange=processAnswer;
  34.         serverRequest.open("GET", url, true);
  35.         serverRequest.setRequestHandler("Content-Type", "application/x-www-form-urlencoded");
  36.         serverRequest.send(params);
  37.     }
  38. }
  39.  
  40. /**
  41.  * Hier kommt endlich unsere Funktion mit der wir
  42.  * die Antwort des Servers verarbeiten.
  43.  */
  44. function processAnswer(){
  45.     var ready = serverRequest;
  46.     if(ready==READY_STATE_COMPLETE){
  47.        // Unser super Fußball oder Chat Code….
  48.     )
  49. }

Diesen Code müssten wir immer in unsere Funktionen in so ähnlicher Weise reinfummeln. Wir hätten außerdem noch mit der globalen Variable diverse Schwierigkeiten. Stell dir vor du möchtest über die Fußballergebnisse auf der gleichen Seite chatten. Dann weist du unter Umständen nicht mehr, welche Antwort vom Server nun zum Fußball oder zum Chat gehört.

Facade Pattern hierfür verwenden

Wenn wir unseren Code nochmal anschauen, wäre eine Kapselung der ganzen Kommunikation gar nicht so schlecht.
Wir könnten den ganzen Kommunikations- und Webserver Rückmeldungskram in ein dafür vorgesehenes Objekt verbuddeln.
Diesem Objekt geben wir im Konstruktor mit, welche Callback Funktion wir aufrufen wollen und welche URL verwendet werden soll.

Wir kapseln also die ganze Komplexität des Serveraufrufs und können dieses Objekt immer wieder verwenden ohne die Details des Serveraufrufs zu kennen.

Wie wir diese Klasse aufbauen erkläre ich in einem nächsten Artikel.

Merken und weiterempfehlen Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • Technorati
  • Wikio DE
  • Webnews
  • MisterWong
  • Y!GG
  • Digg
  • del.icio.us

Der Beitrag wurde am Mittwoch, den 25. März 2009 um 16:38 Uhr veröffentlicht und wurde unter Design Pattern, Programmieren abgelegt.
Kurzlink: http://www.baldenhofer.eu/blog/?p=655

Dir gefiel der Artikel? Dann abonniere doch den RSS Feedrss

Du kannst die Kommentare zu diesem Eintrag durch den RSS 2.0 Feed verfolgen. Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

Eine Reaktion zu “AJAX Kommunikation ohne Fassaden Pattern”

  1. [...] schrieb AJAX Kommunikation ohne Fassaden Pattern  Guggat emol Blog bei ObjekteNebenläufigkeiten beim Lesen von Newseinträgen  Guggat emol Blog bei [...]

Schreibe mir

zum Seitenanfang