Ajax Schnittstelle (Frontend)

Für Ajax Aufrufe im Frontend wurde die json.php eingeführt um einfache und einheitliche Requests zu ermöglichen.

Ein Ajax Request muss /json.php ansteuern. Hier werden Methoden einer json.php Datei aufgerufen die in site/ liegt. Welche json.php das ist, wird über die Parameter festgelegt:

site = der Mandant Für Ajax Aufrufe im Frontend wurde die <strong>json.php</strong> eingeführt um einfache und einheitliche Requests zu ermöglichen.</strong>

Ein Ajax Request muss /json.php ansteuern. Hier werden Methoden einer json.php Datei aufgerufen die in site/ liegt. Welche json.php das ist, wird über die Parameter festgelegt:

site = der Mandant lang = die Sprache id = die Seite

Wenn "site", "lang" und "id" nicht gesetzt sind, wird der Standardmandant und dessen Startseite verwendet!

Die json.php Datei wird gesucht in:

  1. site/<Mandant>/<Seitentyp>/
  2. site/_global/<Seitentyp>/
  3. site/<Mandant>/
  4. site/_global/

In der angesteuerten json.php wird eine Klasse definiert:

class JSON_Request extends Ego_Request {}
In dieser Klasse werden Methoden definiert, die mit dem Parameter "method" aufgerufen werden. Eventuelle Parameter, die dieser Methode übergeben werden sollen, werden mit einem Objekt "params" übergeben.

In dieser Klasse kann jederzeit mit $this->site und $this->page auf das aktuelle Site und Page Objekt zugegriffen werden (oder auch $this->auth und $this->smarty). Beispiel:

class JSON_Request extends Ego_Request { public function json_test($a, $b) { return $this->page->field['name'].', '.$a.', '.$b; } }

Wird keine Klasse definiert, können auch alternativ Funktionen definiert werden. Die Site und Page Objekte sind dann mit $GLOBALS['site'] und $GLOBALS['page'] erreichbar (oder auch $GLOBALS['auth'] und $GLOBALS['smarty']). Beispiel:

function json_test($a, $b) { return $GLOBALS['page']->field['name'].', '.$a.', '.$b; }

Der Rückgabewert ist ein Objekt mit "result" und "error". Die Methode selbst liefert nur den Rückgabewert für "result". Eigene Fehlermeldungen können mit $GLOBALS['return']['error'] geschrieben werden (für die JSON_Request Klasse sind die Methoden getError() und setError($error) verfügbar).

Ein Javascript Ajax Aufruf mit JSON sieht z.B. so aus:

if (JSON) { var xmlhttp = null; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); } if (xmlhttp) { xmlhttp.open('POST', '{/literal}{$egotec_conf.url_dir}json.php{literal}', true); xmlhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var ret = JSON.parse(xmlhttp.responseText); } }; xmlhttp.send(JSON.stringify({ site : '{/literal}{$site->name}{literal}', lang : '{/literal}{$site->language}{literal}', id : {/literal}{$page->field.id}{literal}, params : {a : 1, b : 2}, method : 'json_test' })); } }
wb_incandescent
So ein Aufruf lässt sich natürlich auch mit z.B. dojo oder jQuery realisieren. Wichtig ist, dass der Request als JSON gesendet und der Response als JSON empfangen wird.
warning
Bitte beachten Sie, dass nur POST Requests erlaubt sind. Alle anderen Methoden werden mit einem 403 Header beantwortet.