produktivzone
8 Normseiten, geschätzte Lesezeit 7 Min.

XAJAX

Was ist XAJAX?

Xajax ist eine Open Source PHP-Bibliothek für die Realisierung von Ajax-Anwendungen. Die Bibliothek ist hier erhältlich.

Das Schöne an dieser Bibliothek ist, dass es sich komplett um die Kommunikation zwischen dem Server und dem Browser kümmert, so dass keine weiterführende Javascript-Kenntnisse notwendig sind. Die Ajax-Funktionen werden dazu einfach in PHP gemappt. Auf diese Weise ist es möglich, bestehende Projekte mit Ajax-Funktionen zu erweitern.

Standartmäßig erfolgt die Kommunikation zwischen dem Browser und dem Server über der CGI-Methode Post, Get ist auf Wunsch auch möglich. Die Variabelnamen entsprechen Funktionsnamen, die Werte beinhalten die Parameter, welche die Funktion benötigt. Der Server beantwortet die Anfragen mit XML. Das Root-Element lautet xjx, die Elementnamen beinhalten keine Vokale.

pratkische Umsetzung

Will man beispielsweise die PHP Funktion addieren(a, b) über Ajax abbilden, muss man wie folgt vorgehen:

Zunächst muss die Xajax-Bibliothek heruntergeladen und in die Applikation in ein Verzeichnis kopiert werden. Sie besteht aus den vier Ordnern:

xajax_controls

xajax_core

xajax_jw

xajax_plugins

Die Bibliothek wird in der PHP-Applikation als PHP-Include eingebunden

require_once ("xajax_core/xajax.inc.php");

Um die Xajax-Funktionen verwenden zu können, muss eine Xajax-Instanz angelegt werden

$xajax = new xajax();

Anschließend muss die zu verwendende Funktion bei Xajax angemeldet werden, in diesem Beispiel lautet die Funktione "addieren"

$xajax->registerFunction ("addieren");

Die Funktion selbst muss ein Objekt Typ xajaxResponse zurückgeben. Das Ergebnis wird bei der Rückgabe in das HTML-Element Ergebnis ausgegeben.

function addieren($a, $b) {

$objResponse = new xajax­Response();

$objResponse->assign("Ergebnis", "value", $a + $b);

return $objResponse;

}

Damit das PHP-Script die Ajax-Requests entgegennehmen und ausführen kann, muss an der entsprechenden Stelle die Xajax-Instanz instruiert werden. Es ist wichtig, dass diese Funktion aufgerufen wird, bevor PHP etwas ausgegeben hat. Zu beachten ist, dass PHP nach der Abarbeitung einer Ajax-Anfrage beendet wird.

$xajax->processRequest();

Für die Nutzung der Ajax-Funktionen muss die Bibliothek mitsamt den entsprechenden Javascript-Anweisungen implementiert werden. Dies erfolgt im HTML im Header-Bereich wie folgt:

<html>

<head>

...

<?php $xajax->printJavaScript(); ?>

</head>

...

</html>

Wenn man die Ajax-Funktionen verwenden möchte, muss lediglich der Präfix "xajax_" vor dem PHP-Funktionsnamen vorangestellt werden. Der Aufruf kann über den onclick-Eventhandler wie folgt aussehen:

<button onclick = "xajax_addieren (2,3);">berechnen</button>

der komplette Sourcecode

In dem folgenden Quelltext werden die Parameter aus einem Formular übernommen:

<?

require_once ("xajax_core/xajax.inc.php");

$xajax = new xajax();

$xajax->registerFunction ("addieren");

function addieren($a, $b) {

$objResponse = new xajaxResponse();

$objResponse->assign ("ergebnis", "value", $a + $b);

return $objResponse;

}

$xajax->processRequest();

?>

<html>

<head>

<?php $xajax->printJavaScript(); ?>

</head>

<input type="text" id="a" value="2" size="2">*

<input type="text" id="b" value="3" size="2">=

<input type="text" id="ergebnis" size="2" value="">

<button onclick="xajax_addieren (document.getElementById (’a’).value,

document.getElementById (’b’).value); ">berechnen</button>

</html>

wie das funktioniert

Die Ausführung einer Ajax-Anfrage erfolgt in dem oben erwähnten Beispiel wie folgt:

Wird der Button "berechnen" angeklickt, wird die Javascript-Funktion "xajax_addieren" ausgeführt, als Parameter werden die Werte as den Formular-Feldern a und b an die Funktion übergeben.

die Ajax-Funktion leitet die Anfrage über einen gewöhnlichen Post-Request an den Server weiter. Als Ziel wird die aktuelle URL genutzt, so dass sichergestellt ist, dass die Ajax-Anfrage auch ausgeführt wird.

Der Server nimmt die Anfrage entgegen und liest die mitgeschickten Post-Variabeln aus. Diese Variabeln enthalten den PHP-Funktionsnamen und die dazu gehörenden Parameter. Mit Hilfe dieser Angaben führt der Server anschließend die PHP-Funktion "addieren()" mit den mitgeschickten Werten a und b auf.

Die Funktion gibt als Antwort ein xajaxResponse-Objekt zurück, welches das Ergebnis beinhaltet. Dieses Objekt wird in XML umgewandelt und an den Browser geschickt. Anschließend wird das PHP-Script beendet.

Die Xajax-Funktion nimmt das XML entgegen. Darin enthalten ist das Ergebnis, sowie die Anweisung, was die Javascript-Funktion damit tun soll. In diesem Beispiel soll das Ergebnis in dem Formular-Feld c angezeigt werden.

wichtige Methoden Xajax-Objekt

setRequestURI (string $sRequestURI)

Legt die URI fest, an die Requests gesendet werden. Wenn nicht angegeben, wird die aktuelle verwendet.

setWrapperPrefix ($sPrefix)

Hier kann der Präfix der Javascript-Funktionen geändert werden. Standartmäßig lautet dieser xajax

setLogFile (string $sFilename)

Legt fest, in welche Datei Xajax Logs schreiben soll. Standardmäßig wird kein Log angelegt.

setCharEncoding (string $sEncoding)

Legt die Zeichencodierung der von Xajax erzeugten HTML-Ausgabe fest (z.B. ISO-8859-1 oder utf-8).

registerFunction (mixed $mFunction, string $sRequestType)

Registriert eine PHP-Funktion, die durch Javascript aufrufbar sein soll. Ubergeben wird entweder ein String mit dem Funktionsnamen oder objektorientiert ein String-Array mit folgendem Aufbau: array("myFunctionName", "myClass", "myMethod")

registerExternalFunction (mixed $mFunction, string $sFile, string $sRequestType)

Von der Funktion her identisch mit registerFunction, nur mit zusatzlichen Parameter für den Dateinamen der PHP-Datei, in der die Funktion zu finden ist.

registerCatchAllFunction (mixed $mFunction)

Legt eine PHP-Funktion fest, welche aufgerufen werden soll, wenn die gewünschte PHP-Funktion nicht gefunden wird. Dies kann eigentlich nur auftreten, wenn man in Javascript direkt xajax.call() aufruft.

registerPreFunction (mixed $mFunction)

Hier legt man eine PHP-Funktion fest, die vor jedem Aufruf einer registrierten PHP-Funktion ausgeführt werden soll. Die Rückgabewerte von beiden Funktionen werden kombiniert.

processRequests ()

Diese Methode muss aufgerufen werden, um die Ajax-Requests verarbeiten zu können. Sie sollte nur ein einziges Mal und erst nach allen Funktionsregistrierungen aufgerufen werden.

printJavascript (string $sJsURI=, string $sJsFile=NULL)

Gibt den von Xajax generierten Javascript-Code aus. Sollte innerhalb des HTML-Tags head aufgerufen werden. Die Parameter dienen dazu, Pfad und Namen der Javascript-Datei von Xajax anzugeben, falls diese nicht im selben Verzeichnis wie die PHP-Datei liegen.

getJavascript (string $sJsURI=, string $sJsFile=NULL)

Von der Funktion her identisch mit printJavascript, gibt den Javascript-Code jedoch als String zurück.

optional Überladen von internen Xajax-Objekt Methoden

loadingFunction ()

Diese Funktion kann überladen werden, um eine eigene Funktion aufzurufen, wenn Xajax einen Request abschickt. Dies kann benutzt werden, um zum Beispiel einen Ladebalken anzuzeigen.

doneLoadingFunction ()

Diese Funktion kann überladen werden, um eine eigene Funktion aufzurufen, wenn Xajax eine Response erhält. Dies kann benutzt werden, um zum Beispiel einen Ladebalken wieder auszublenden.

call (sFunction, aArgs, sRequestType)

Schickt einen XMLHttpRequest ab, um die angegebene PHP-Funktion aufzurufen. Wird in der Regel nicht direkt aufgerufen, sondern von den durch Xajax generierten Javascript-Funktionen.

viewSource ()

Zeigt den HTML-Quellcode der Seite nach Durchführung der Änderungen durch Xajax an.

wichtige Methoden xajaxResponse-Objekt

ConfirmCommands (integer $iCmdNumber, string $sMessage)

Fügt einen Bestätigungsdialog hinzu, mit dem der Benutzer in die Ausführung der DOM-Modifikationen eingreifen kann.

$iCmdNumber

ist die Anzahl der Befehle, die übersprungen werden sollen, wenn der Benutzer auf "Abbrechen" klickt,

$sMessage

ist der Text, der im Bestätigungsdialog angezeigt werden soll.

assign (string $sTarget, string $sAttribute, string $sData)

Diese Methode setzt das Attribut $sAttribute des Elements mit der ID $sTarget auf den Wert $sData. Um den Inhalt des Elements selbst zu ersetzen, kann als Attribut "innerHTML" angegeben werden.

append (string $sTarget, string $sAttribute, string $sData)

Diese Methode erweitert das Attribut $sAttribute des Elements mit der ID $sTarget auf den Wert $sData. Der neue Inhalt wird hinter den bisherigen eingefügt.

prepend (string $sTarget, string $sAttribute, string $sData)

Erweitert das Attribut $sAttribute des Elements mit der ID $sTarget auf den Wert $sData. Der neue Inhalt wird vor dem bisherigen eingefügt.

replace (str $sTarget, str $sAttribute, str $sSearch, str $sData)

Diese Methode ersetzt beim Element mit der ID $sTarget alle Vorkommnisse des Strings $sSearch im Wert des Attributs $sAttribute mit dem String $sData.

clear (string $sTarget, string $sAttribute)

Löscht den Wert des übergebenen Attributs.

alert (string $sMsg)

Zeigt ein Dialogfenster mit demübergebenen String an.

redirect (string $sURL, integer $iDelay)

Leitet den Browser auf die angegebene Adresse um. Es kann eine Verzögerung in Sekunden angegeben werden.

script (string $sJS)

Führt den übergebenen Javascript-Code direkt aus.

call ($sFunc, $arg0, $arg1, ...)

Diese Methode ruft die übergebene Javascript-Funktion mit denübergebenen Parametern aus.

remove (string $sTarget)

Entfernt das Element mit der ID $sTarget.

create (str $sParent, str $sTag, str $sId)

Fügt einen neuen HTML-Tag vom Typ $sTag mit der ID $sId als Kindelement des Elements mit der ID $sParent ein.

insert (string $sBefore, string $sTag, string $sId)

Fügt einen neuen HTML-Tag vom Typ $sTag mit der ID $sId vor dem Element mit der ID $sBefore ein.

insertAfter (string $sAfter, string $sTag, string $sId)

Fügt einen neuen HTML-Tag vom Typ $sTag mit der ID $sId nach dem Element mit der ID $sAfter ein.

addEvent (string $sTarget, string $sEvent, string $sScript)

Fügt dem Element mit der ID $sTarget einen neuen Event-Handler hinzu. Bei Eintritt des Ereignisses wird der übergebene Javascript-Code ausgeführt.

addHandler (string $sTarget, string $sEvent, string $sHandler)

Fügt dem Element mit der ID $sTarget einen neuen Event-Handler hinzu. Bei Eintritt des Ereignisses wird dieübergebene Javascript-Funktion ausgeführt.

removeHandler (str $sTarget, str $sEvent, str $sHandler)

Diese Methode entfernt einen Event-Handler