Lange Winterabende. Habe heute endlich mal eine Sache in trockene Tücher gepackt die längst fällig war. Die Idee die dahintersteckt:
Webanwendungen sollen, sofern JavaScript verfügbar ist, mit AJAX laufen. Ansonsten als native CGI. Wie üblich bringe ich da erst das native CGI zum laufen. Sämtliche Daten die in das Responsetemplate gepflanzt werden sollen, liegen bei mir in einem sog.
{STASH} (Datenversteck).
Wenn also ein bestimmter Parameter kommt, wird der
{STASH} mit Daten betankt. Ein XHR-Request nun, zeigt sich per Request-Header x-hr kenntlich, was serverseitig geprüft wird:
if( $ENV{HTTP_X_HR} ){
return $self->{CONTENT} = $self->encode_stash();
}
D.h., für die AJAX Response wird nur der STASH serialisiert. Und damit wird ein progressive Enhancement zu einem Kinderspiel.
Macht Ihr das auch so?
PS: In JS heißt die Funktion
decode_stash(). Sie kann JSON kapseln oder einen bliebig anderen Serializer. Hier ist ein Beispiel:
http://rolfrost.de/cpoint2bints.html
Die Kapselung hat den Vorteil, daß Code wiederverwendbar wird, so kann die serverseitige Methode von jeder beliebigen Instanz aufgerufen werden die in meinem FW von der main-Class erbt (Factory). Sie hat also immer denselben Namen, sowohl server- als auch clientseitig.
.
Last edited: 2018-11-06 06:38:23 +0100 (CET)