base
portal
Suche:
Forum
Start
Neue Seite erstellen
Titel:
<p><i>Bitte beachten: Diese Funktion steht in der Lizenzversion nicht zur Verfügung.</i></p> <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. </p> <h2>Beschreibung</h2> <p>Durch den Parameter <i>script=...</i> wird baseportal angewiesen, einen Befehl nicht wie sonst sofort, auf dem Server, auszuführen. Stattdessen wird eine Javascript-Funktion mit dem bei <i>script</i> 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 <i>return</i> definiert werden. Gibt es diesen Parameter nicht, so heisst die Rückgabe-Funktion automatisch wie die über <i>script</i> 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.</p> An die Sende-Funktionen können optional bis zu 3 Parameter übergeben werden: <table style="border:1px #e0e0e0 solid;margin-top:6px"> <tr><td width=100><i>query</i></td><td>Parameter die per URL übergeben werden (<i>CGI GET</i>)</td></tr> <tr><td><i>post</i></td><td>Daten die über HTTP-Post gesendet werden (<i>CGI POST</i>)</td></tr> <tr><td><i>requestHeader</i></td><td>Parameter die im HTTP-Header gesetzt werden sollen</td></tr> </table> <p>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.</p> An die Rückgabe-Funktion werden 3 Parameter übergeben, die nach Bedarf ausgewertet werden können: <table style="border:1px #e0e0e0 solid;margin-top:6px"> <tr><td width=100><i>responseText</i></td><td>Die Rückgabe als einfacher Text</td></tr> <tr><td><i>responseXML</i></td><td>Die Rückgabe als XML-Daten (müssen entsprechend gesendet werden)</td></tr> <tr><td><i>status</i></td><td>Der Statuswert der Rückgabe. Enthält <i>200</i> wenn alles Ok ist, sonst den HTTP-Fehlercode</td></tr> </table> <h2>Beispiele</h2> <p>Das folgende Beispiel übersetzt deutsche Begriffe ins Englische - sofort bei der Eingabe:</p> <pre style="border:1px #e0e0e0 solid;background-color:#f0f0f0;padding:8px"> <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> <form> Begriff: <input type=text onkeyup="getname('Deutsch~='+this.value)"> </form> <div id="out" width=500 height=200 style="border:1px solid red"></div></pre> <p>Wie man sieht ist der Code denkbar einfach: Durch den Parameter <i>script=...</i> wird das <i><loop>..</loop></i> nicht auf dem Server ausgeführt. Stattdessen wird die Javascript-Funktion <i>getname</i> 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 <i>loop</i> ausgeführt und fragt im Beispiel das Deutsch/Englisch-Wörterbuch ab. Nach Beendigung wird die Callback-Funktion <i>_getname</i> (da wir keinen anderen Namen mit <i>return=</i> angegeben haben) in Javascript aufgerufen und das Ergebnis als Parameter übergeben. Dieses wird einfach in einen <i>div</i>-Container geschrieben und somit angezeigt. <br> <br>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> <br><br> <p>Ebenso kann Perl oder PHP als Javascript-Funktion definiert werden. Hier ein PHP-Aufruf:</p> <pre style="border:1px #e0e0e0 solid;background-color:#f0f0f0;padding:8px"> <php script=phpversion> out("PHP-Version: ".phpversion()); </php> <script> function _phpversion(x) { alert(x) } </script> <input type=button value="PHP-Version" onclick="phpversion()"> </pre> 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> <br><br> <p>Und hier ein kleines Perl-Skript das eine Bankverbindung auf Gültigkeit überprüft - sofort, während der Eingabe:</p> <pre style="border:1px #e0e0e0 solid;background-color:#f0f0f0;padding:8px"> <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> </pre> 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> <br><br> <p>Und natürlich kann auch die komplette Datenbank-Ausgabe als Javascript-Funktion verwendet werden:</p> <pre style="border:1px #e0e0e0 solid;background-color:#f0f0f0;padding:8px"> <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> </pre> <p>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.</p> 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>
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.01s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!