base
portal
Suche:
Forum
Start
Neue Seite erstellen
Titel:
<i>Bitte beachten: Diese Funktion steht in der Lizenzversion nicht zur Verfügung.</i></p> baseportal bietet die auf den ersten Blick verblüffende Möglichkeit, beliebige baseportal-Funktionen (perl, php, loop etc.) erst im Browser bei der Anzeige der Seite auszuführen. Natürlich steckt dahinter ein kleiner Trick: In Wirklichkeit wird eine Verbindung zum Server hergestellt, der den Code ausführt und das Ergebnis zurückschickt. Auch Parameter können beim Aufruf übermittelt werden, die dann wie gewohnt bereitstehen. <h2>Beschreibung</h2> Durch den Parameter <c>script=...</c> wird baseportal angewiesen, einen Befehl nicht wie sonst sofort, auf dem Server, auszuführen. Stattdessen wird eine Javascript-Funktion mit dem bei <c>script</c> angegebenen Namen bereitgestellt. Im Browser kann diese Funktion nun ganz normal wie in Javascript üblich aufgerufen werden. Sodann verbindet sich diese im Hintergrund mit der aufrufenden Seite, führt den Befehl aus und schickt das Ergebnis an eine Rückgabe-Funktion zurück. Der Name dieser Funktion kann über den Parameter <c>return</c> definiert werden. Gibt es diesen Parameter nicht, so heisst die Rückgabe-Funktion automatisch wie die über <c>script</c> definierte mit Unterstrich davor. Die Kommunikation mit dem Server läuft dabei "asynchron" ab, d.h. während auf das Ergebnis gewartet wird, bleibt der Browser nicht stehen, sondern es können weitere (Javascript-)Aktionen ausgeführt werden. An die Sende-Funktionen können optional bis zu 3 Parameter übergeben werden: <tab> Name|Beschreibung <c>query</c>|Parameter die per URL übergeben werden (<i>CGI GET</i>) <c>post</c>|Daten die über HTTP-Post gesendet werden (<i>CGI POST</i>) <c>requestHeader</c>|Parameter die im HTTP-Header gesetzt werden sollen </tab> In den allermeisten Fällen reicht die Übergabe über die URL, also die Angabe des 1. Parameters, aus. Nur bei sehr grossen Formular-Daten (z.B. Texteingabefelder) müssen diese wegen der Längenbeschränkung von URLs über <i>post</i> gesendet werden. An die Rückgabe-Funktion werden 3 Parameter übergeben, die nach Bedarf ausgewertet werden können: <tab> Name|Beschreibung <c>responseText</c>|Die Rückgabe als einfacher Text <c>responseXML</c>|Die Rückgabe als XML-Daten (müssen entsprechend gesendet werden) <c>status</c>|Der Statuswert der Rückgabe. Enthält <i>200</i> wenn alles Ok ist, sonst den HTTP-Fehlercode </tab> <h2>Beispiele</h2> Das folgende Beispiel übersetzt deutsche Begriffe ins Englische - sofort bei der Eingabe: <code> <loop script=getname range=0,10 db=/_bib/dict_de_en/dict_de_en> $Deutsch - $English<br> </loop> <script> function _getname(x) { document.getElementById("out").innerHTML=x; } </script> <p>Begriff: <input type=text onkeyup="getname('Deutsch~='+this.value)"><p/> <div id="out" width=500 height=200 style="border:1px solid red"></div> </code> Wie man sieht ist der Code denkbar einfach: Durch den Parameter <c>script=...</c> wird das <c><loop>..</loop></c> nicht auf dem Server ausgeführt. Stattdessen wird die Javascript-Funktion <c>getname</c> bereitgestellt, die bei jedem Tastendruck in einem Textfeld aufgerufen wird. Der Inhalt des Textfeldes wird als Parameter übergeben. Erst wenn der Nutzer einen Buchstaben eingibt wird das <c>loop</c> ausgeführt und fragt im Beispiel das Deutsch/Englisch-Wörterbuch ab. Nach Beendigung wird die Callback-Funktion <c>_getname</c> (da wir keinen anderen Namen mit <c>return=</c> angegeben haben) in Javascript aufgerufen und das Ergebnis als Parameter übergeben. Dieses wird einfach in einen <c>div</c>-Container geschrieben und somit angezeigt. Hier ist das Beispiel in Aktion: <a href="http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/loop" target="_blank">http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/loop</a> Ebenso kann Perl oder PHP als Javascript-Funktion definiert werden. Hier ein PHP-Aufruf: <code> <php script=phpversion> out("PHP-Version: ".phpversion()); </php> <script> function _phpversion(x) { alert(x) } </script> <input type=button value="PHP-Version" onclick="phpversion()"> </code> Aufruf: <a href="http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/php" target="_blank">http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/php</a> Und hier ein kleines Perl-Skript das eine Bankverbindung auf Gültigkeit überprüft - sofort, während der Eingabe: <include src=/_bib/BLZ/BLZ> <code> <perl script=kontocheck> $result=&KontoCheck($kto, $blz); out "Konto: $kto<br>BLZ: $blz<br>Ergebnis: $result<br>Bank: $Name<br>PLZ: $PLZ<br>Ort: $Ort"; </perl> <script> function _kontocheck(r) { document.getElementById("out").innerHTML=r; } </script> <p> Konto-Nr.: <input type=text id='kto' onkeyup="kontocheck('kto='+this.value+'&'+'blz='+document.getElementById('blz').value)"><br/> BLZ: <input type=text id='blz' onkeyup="kontocheck('kto='+document.getElementById('kto').value+'&'+'blz='+this.value)"><br/> <p/> <div id="out" width=500 height=200 style="border:1px solid red"></div> </code> Aufruf: <a href="http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/perl" target="_blank">http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/perl</a> Und natürlich kann auch die komplette Datenbank-Ausgabe als Javascript-Funktion verwendet werden: <code> <do action=all db=/baseportal/forum script=database> <script> function _database(x) { document.getElementById("out").innerHTML=x; } </script> <loop sort=- range=0,10 db=/baseportal/forum> <div onmouseover='database("cmd=all&Id=$_id")'>$Name - $Titel</div> </loop> <div id="out" width=500 height=200 style="border:1px solid red"></div> </code> Hier werden die neuesten 10 Einträge mit Namen und Titel als Liste ausgegeben und beim Darüberfahren mit der Maus, wird der jeweilige Eintrag im Detail gezeigt. Aufruf: <a href="http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/do_all" target="_blank">http://baseportal.de/cgi-bin/baseportal.pl?htx=/baseportal/Projekte/ajax/do_all</a> <br> Um grosse Daten per POST zu übertragen, muss an das Skript einfach ein zweiter Parameter übergeben werden, z.B.: <code> database("cmd=add", 'Titel:=Test&Text:='+text) </code>
Name:
Passwort:
Stichworte:
Version:
1
2
3 Angebot:
Alle
Nur Miete / Lizenz
Nur Miete / Lizenz professional
Nur Miete
Nur Miete smart + pro
Nur Miete smart + pro / Lizenz
Nur Miete pro
Nur Miete ab pure2, smart2, pro1
Nur Lizenz
Nur Lizenz professional
Nur Kostenlos
Ohne Änderungen zurück zur Seite
-
+
©
baseportal
GmbH. Alle Rechte vorbehalten.
powered in 0.04s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!