Hinweise zu AJAX und AJAM

JSON

Bei AJAX-Anwendungen - das erkennt man leicht am Namen „Asynchronous JavaScript and XML“ - ist XML das übliche Format, obwohl es wegen seiner aufgeblähten Struktur vielfach kritisiert wird. Für AJAX können aber auch andere Formate wie JSON[141] zum Einsatz kommen. JSON (JavaScript Object Notation) ist - der Name verrät es - besonders gut für JavaScript-Anwendungen geeignet, da die Datenstruktur hier nativ mit eval() in ein Objekt umgewandelt werden kann und wenig Overhead hat. Es existieren aber auch zahlreiche Implementierungen für PHP, Perl etc. Eine Ausgabe in JSON fehlt dem AJAM bisher jedoch leider. Man könnte aber beispielsweise die Plain-Text-Ausgabe clientseitig in JSON umwandeln, wenn einem das leichter fällt oder wenn es sich besser in vorhandene JS-Libs inegrieren lässt. Hier der Ansatz als Idee:

// angenommen in responseText ist der empfangene Antwort-Text
// gespeichert, was wir hier nur simulieren:
var responseText = 'Response: Success\n'
+'Message: Mailbox Message Count\n'
+'Mailbox: 123\n'
+'NewMessages: 0\n'
+'OldMessages: 0\n';

// einfache Anführungszeichen escapen:
responseText = responseText.replace( /\'/g, "\\'" );
// Felder quoten:
responseText = responseText.replace( /^([a-z\d]*):\s*(.*)/gmi, "'$1':'$2
'," );
// in Objekt umwandeln:
eval('var packet = {'+ responseText +'}');

// jetzt kann man wie bei jedem Objekt so auf die Felder zugreifen:
alert( packet['NewMessages'] );   // gibt "0" aus

Ping

Für Zugriffe von AJAX-Anwendungen auf den AJAM ist der Ping-Befehl besonders hilfreich, der dazu dient, die Verbindung und Authentifizierung offenzuhalten.

http://localhost:8088/asterisk/rawman?action=Ping

Response: Pong

AJAM Demo

Unter der URL

http://localhost:8088/asterisk/static/ajamdemo.html

ist eine kleine Beispiel-Anwendung mitgeliefert, die den Zugriff per AJAX demonstriert. Sie verwendet die äußerst praktische JavaScript-Library Prototype[142] für die AJAX-Zugriffe und zeigt mit der Action Status die momentan aktiven Kanäle an. Sie können die AJAM-Demo als Basis für eigene AJAX-Anwendungen heranziehen.

Apache

Der Webserver von Asterisk ist sehr minimalistisch und ersetzt keinesfalls einen „richtigen“ Server wie den Apache, der auch PHP-Skripte ausführt etc. Um beides zu vereinen, könnte man z.B. in der httpd.conf des Apache an der entsprechenden Stelle den Eintrag

ProxyPass /ajam http://localhost:8088/asterisk

verwenden, um für alle Zugriffe auf den URL-Pfad /ajam nur als Proxy zu fungieren und die Anfragen zum AJAM durchzuschleusen.