JavaScript - auf Matthias-Draeger.info
JavaScript - auf Matthias-Draeger.info
JavaScript - auf Matthias-Draeger.info
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Netzprogrammierung<br />
Mobiler Code<br />
Robert Tolksdorf und Peter Löhr
Überblick<br />
1. Eingebetter Code 4<br />
2. Javascript 11<br />
3. AJAX 35<br />
Robert Tolksdorf und Peter Löhr 2
Klientenseitige Verarbeitung<br />
• „Dynamischer Inhalt“ kann auch bedeuten, dass eine an<br />
den Klienten gelieferte HTML-Seite Code enthält (oder<br />
<strong>auf</strong> Code verweist), der vom Browser - oder einem<br />
geeigneten Plugin des Browsers - auszuführen ist.<br />
Schlagwort: Dynamisches HTML.<br />
• Motivation: Eingabe-Überprüfung, visuelle Effekte,<br />
animierte Seiten, effiziente graphische Interaktion,<br />
Anpassung an die lokale Plattform.<br />
• Zwei Techniken für solchen mobilen Code:<br />
• eingebetteter Skript-Code:<br />
• nachzuladender Code:<br />
..... <br />
..... <br />
• Sicherheitsproblematik von mobilem Code:<br />
Code aus möglicherweise dubioser Quelle wird<br />
ausgeführt -> Gefahr von Trojanischen Pferden!<br />
Robert Tolksdorf und Peter Löhr 3
In HTML eingebetteter Code<br />
Robert Tolksdorf und Peter Löhr
Einbettung von Skript-Code<br />
HTML-Elemente für eingebetteten Code - Beispiel:<br />
<br />
.....<br />
<br />
.................. VBScript Code<br />
<br />
.....<br />
Cannot execute VBScript!<br />
.....<br />
Wird ausgegeben, wenn der Browser die<br />
gewünschte Skriptsprache nicht unterstützt.<br />
(siehe HTML-Spezifikation [ http://www.w3.org/TR/html4/ ] Kap. 18)<br />
Robert Tolksdorf und Peter Löhr 5
Gemischte Sprachen<br />
<br />
<br />
<br />
.....<br />
<br />
Gilt für gesamtes Dokument.<br />
Voreinstellung ist "text/javascript".<br />
<br />
.....<br />
<br />
.................. <strong>JavaScript</strong> Code<br />
<br />
.....<br />
<br />
.................. VBScript Code<br />
<br />
.....<br />
Robert Tolksdorf und Peter Löhr 6
Skript-Code als Ziel eines Verweises<br />
Ein HTML-Verweis (link, A element, tag ) kann sich<br />
auch <strong>auf</strong> Skript-Code beziehen:<br />
<br />
.....<br />
Unsere Geschäftsbedingungen finden Sie<br />
hier.<br />
<br />
Unsere Coldline erreichen Sie<br />
hier.<br />
Wenn Sie Ihren Namen eingeben wollen -<br />
<br />
hier.<br />
.....<br />
<br />
Robert Tolksdorf und Peter Löhr 7
GUI-Interaktion<br />
Skript-Code kann auch <strong>auf</strong> andere Weise <strong>auf</strong> vom Benutzer<br />
ausgelöste Ereignisse (intrinsic events) reagieren. Beispiel:<br />
<br />
<br />
<br />
function check() { ..... }<br />
<br />
<br />
<br />
.....<br />
<br />
.....<br />
Auch hier beliebiger Skript-Code!<br />
Robert Tolksdorf und Peter Löhr 8
Ereignis-Attribute<br />
• onclick<br />
• ondblclick<br />
• onmouseover<br />
• onmouseout<br />
• onfocus<br />
• onblur<br />
• onsubmit<br />
• .....<br />
Für jedes HTML-Element kommt eine gewisse<br />
Auswahl aus diesen Ereignissen in Frage.<br />
Robert Tolksdorf und Peter Löhr 9
Dynamisches Verhalten ...<br />
... ist nicht an GUI-Elemente gebunden!<br />
<strong>JavaScript</strong><br />
https://developer.mozilla.org/en/<strong>JavaScript</strong><br />
http://www.ecma-international.org/publications/standards/Ecma-262.htm<br />
Robert Tolksdorf und Peter Löhr
Einschlägige Skript-Sprachen<br />
• Typische Sprachen für eingebetteten Skript-Code in HTML:<br />
• <strong>JavaScript</strong> mit Varianten<br />
• ECMAScript<br />
• Jscript<br />
• JScript.NET<br />
• VBScript<br />
• Tcl<br />
• Flash<br />
(Microsoft)<br />
(Microsoft)<br />
• <strong>JavaScript</strong> wird von fast allen Browsern unterstützt!<br />
• Flash ist attraktiv für Graphik/Animation<br />
Robert Tolksdorf und Peter Löhr 12
<strong>JavaScript</strong><br />
• <strong>JavaScript</strong> ist keine Java-Variante!<br />
• Mehrparadigmensprache:<br />
• objektorientiert mit Prototypen statt Klassen<br />
• funktional (beeinflusst durch Scheme, Self, Smalltalk, ...)<br />
• ausgeführt durch einen Interpretierer im Browser<br />
• kann umgehen mit Elementen des Dokuments und des<br />
umgebenden Browser-Fensters, ferner mit Ereignissen<br />
• auch <strong>auf</strong> der Server-Seite einsetzbar („SSJS“)<br />
• Meilensteine und Implementierungen:<br />
• <strong>JavaScript</strong> (1995): Netscape/Sun<br />
• ECMAScript: ECMA (European Computer Manufacturers<br />
Association)<br />
• JScript: Microsoft<br />
• Seit Version 1.5: Orientierung an DOM (Document Object<br />
Model): standardisierte Repräsentation des Dokumentinhalts<br />
Robert Tolksdorf und Peter Löhr 13
Ein erstes Beispiel<br />
<br />
function action() {<br />
document.write("");<br />
document.write("autsch! ") }<br />
<br />
<br />
<br />
Dies ist<br />
document.write("ein Test:")<br />
<br />
<br />
Nein,<br />
mich!<br />
<br />
<br />
Achtung: bei Skript-Fehlern schlechte oder<br />
gar keine Fehlermeldungen!<br />
Robert Tolksdorf und Peter Löhr 14
Daten in <strong>JavaScript</strong><br />
• dynamisch getypt (wie andere Skriptsprachen auch) mit<br />
• Zahlen, z.B. 4711 3.14 -1<br />
• Zeichenketten, z.B. 'bobcat'<br />
• Wahrheitswerte: true false<br />
• Objekte, z.B. { re: 3.14, im: 0 }<br />
"Bob's cat" 'Bob\'s cat\n‘<br />
• Felder (sind auch Objekte), z.B. [4711, "4711", false] .<br />
• Reguläre Ausdrücke (sind auch Objekte), z.B. /ab*c/<br />
• Funktionen ! (siehe unten)<br />
• Variablenvereinbarung:<br />
• ohne Initialisierung: var age; (Wert ist undefined !)<br />
• mit Initialisierung:<br />
• Konstanten:<br />
• Ausdrücke: ungefähr wie in Java<br />
var age = 23; (ohne var: global!)<br />
const host = "localhost";<br />
Robert Tolksdorf und Peter Löhr 15
Anweisungen in <strong>JavaScript</strong><br />
• Einfache Anweisungen:<br />
• Zuweisung: V = E ;<br />
• return [ E ] ;<br />
• Zusammengesetzte Anweisungen:<br />
• wie in Java; zusätzlich:<br />
• for ( [ var ] variable in object ) statement<br />
iteriert über Attributnamen (property names) eines Objekts<br />
• for each ( [ var ] variable in object ) statement<br />
iteriert über Attributwerte (property values) eines Objekts<br />
• with (object) statement (vgl. Pascal)<br />
erlaubt in statement die Bezugnahme <strong>auf</strong> Attributnamen<br />
des Objekts ohne vorangestellten Objektbezeichner<br />
• Ausnahmebehandlung: ähnlich Java<br />
Robert Tolksdorf und Peter Löhr 16
Funktionen in <strong>JavaScript</strong><br />
• ... sind Werte - wie in funktionalen Sprachen<br />
• function ( parameters ) { statements }<br />
ist eine Prozedur/Funktionsprozedur mit lokalen Variablen<br />
• Parameter: Wertübergabe, keine Typangabe<br />
• function sqr(x) { return x*x; } ist Abkürzung für<br />
const sqr = function(x) { return x*x; }<br />
• Einschlägige Funktionale ab Version 1.6 verfügbar, z.B.<br />
map(sqr, [1,2,3]) == [1,4,9]<br />
• Variable Parameterlisten, Bezugnahme mit arguments[i],<br />
arguments.length<br />
• eval("string") interpretiert den als Zeichenkette<br />
übergebenen <strong>JavaScript</strong> Code (vgl. Lisp!)<br />
• viele Standardfunktionen: parseInt, String, .....<br />
Robert Tolksdorf und Peter Löhr 17
Objekte in <strong>JavaScript</strong><br />
• Prototyp-Objekte statt Klassen<br />
• Eigenschaften, Attribute (properties)<br />
• Komponenten (sub-objects)<br />
• Methoden (methods)<br />
• Ereignisse (events)<br />
• Erzeugung mit Funktion als Konstruktor, z.B.<br />
function Complex(re, im) { this.re = re; this.im = im; }<br />
const notpi = new Complex(3.14, x); (vgl. Beta)<br />
• Somit Funktionsname als Ersatz für Klassenname!<br />
• ... oder kürzer mit Wertbezeichner in { }:<br />
const notpi = { re: 3.14, im: x }<br />
• Die Eigenschaften sind auch als Tabelle (assoziatives<br />
Feld) ansprechbar: notpi.re == notpi["re"]<br />
Robert Tolksdorf und Peter Löhr 18
Methoden von Objekten<br />
• Methoden können als Funktionen dem Konstruktor<br />
übergeben oder auch dynamisch (!) an ein Objekt<br />
gebunden werden. Der Methodenname kann ad hoc<br />
eingeführt werden! Beispiel:<br />
object.method1 = somefunction;<br />
object.method1(...);<br />
// binding<br />
// invocation<br />
Die Funktion bezieht sich mittels this <strong>auf</strong> das Objekt.<br />
• Funktionen sind selbst wiederum Objekte.<br />
• Objektmodell ist extrem reichhaltig und flexibel.<br />
• Zum <strong>JavaScript</strong>-Experten wird man nicht an einem Tag.<br />
Robert Tolksdorf und Peter Löhr 19
Vordefinierte Objekte<br />
• Sprachbezogene Objekte:<br />
• Number, Boolean, String, Array<br />
• Date, Math<br />
• Vom Browser bereitgestellte Objekte; diese bilden eine<br />
Baustein-Hierarchie (containment, aggregation) z.B.<br />
• window repräsentiert Browser-Fenster und enthält Objekte<br />
frame, document, ...<br />
• document repräsentiert das im Fenster gezeigt Dokument<br />
und enthält forms, images, ...<br />
• Ein form-Objekt repräsentiert ein HTML-Formular und<br />
enthält elements verschiedener HTML-Typen wie text,<br />
button, submit, .....<br />
• .....<br />
Robert Tolksdorf und Peter Löhr 20
vereinfachte Objekthierarchie<br />
(aus http://www.comptechdoc.org/independent/web/cgi/javamanual/javaobjheir.html )<br />
Robert Tolksdorf und Peter Löhr 21
Objektbaum<br />
• Alle HTML-Elemente, Attribute und Texte eines Dokuments<br />
sind als Knoten eines Objektbaums repräsentiert und<br />
haben Eigenschaften und Methoden des Prototyps node.<br />
• Typische Eigenschaften:<br />
• childNodes: Feld der Kindknoten<br />
• nodeName: Marke eines Elements, z.B. A für ..<br />
• Typische Methoden:<br />
• appendChild(node) hängt angegebenen Knoten an<br />
• removeChild(node) entfernt angegebenen Knoten<br />
• deleteData(from,length) löscht Teil eines Attribut- oder<br />
Textwerts<br />
• Beachte: Jede Änderung am Objektbaum hat eine<br />
entsprechende Änderung der Darstellung zur Folge!<br />
Robert Tolksdorf und Peter Löhr 22
Objekt window<br />
• ... repräsentiert das Browser-Fenster, in dem der<br />
<strong>JavaScript</strong> Code abläuft. Beachte: statt window.xyz<br />
kann man auch self.xyz oder xyz schreiben.<br />
• Typische Eigenschaft:<br />
• status: Inhalt der Statuszeile (unten); kann beliebig<br />
gesetzt werden!<br />
• Typische Komponente:<br />
• document: das im Fenster gezeigte Dokument (s.u.)<br />
• Typische Methoden:<br />
• alert(warning) öffnet Extrafenster mit Warnungstext<br />
• confirm(question) öffnet Extrafenster mit ja/nein-Frage<br />
und liefert true/false entsprechend der Benutzerreaktion<br />
• back() geht zur letzten Seite zurück<br />
• open(URI, name) öffnet ein neues Fenster<br />
Robert Tolksdorf und Peter Löhr 23
Objekt document<br />
• ... repräsentiert das im Browser-Fenster gezeigte HTML-<br />
Dokument mit allen seinen Elementen.<br />
• Typische Eigenschaft:<br />
• bgColor: Hintergrundfarbe, z.B. "#FFFFFF" (weiß) oder "red"<br />
• Typische Komponente:<br />
• forms: Feld mit allen Formularen des Dokuments<br />
• Typische Methoden:<br />
• open()/close() öffnet/schließt das Dokument zum Schreiben<br />
• write(string) schreibt HTML-Text string ins Dokument<br />
• leert Schreibpuffer und schließt das Dokument<br />
• getElementById(string) liefert das HTML-Element<br />
<br />
• createElement(string) HTML-Element erzeugen, z.B. mit<br />
dem string "h3" ein Überschrift-Element <br />
Robert Tolksdorf und Peter Löhr 24
Prototyp form<br />
• Beachte: form ist prototypisches Objekt für alle Objekte,<br />
die ein HTML-Formular repräsentieren. Dagegen ist<br />
document.forms das Feld aller Formulare im Dokument.<br />
• <br />
• Typische Eigenschaften:<br />
(Ergebnis bestimmt, ob die Aktion ausgeführt wird)<br />
• action: die action des Formulars, z.B. wie in<br />
document.forms[0].action == mailto:<strong>info</strong>@dot.com<br />
• method: die beim Abschicken der eingetragenen Werte zu<br />
verwendende Methode, z.B. wie in<br />
document.forms[0].method = "post";<br />
• name: der Name des Formulars, z.B. wie oben "myform"<br />
Robert Tolksdorf und Peter Löhr 25
Prototyp form<br />
• Einzige Komponente:<br />
• elements: Feld der in einem Formular enthaltenen Elemente,<br />
z.B. wie in (siehe gothic.html, 12-Web-CGI, S. 30)<br />
document.forms[0].elements[2].name == "age"<br />
• Beachte: Wenn ein Formular im HTML-Text wie oben<br />
benannt ist und die in ihm enthaltenen Elemente auch,<br />
kann man mit diesen Namen <strong>auf</strong> die Elemente Bezug<br />
nehmen.<br />
Die folgenden Ausdrücke haben alle den Wert "age" :<br />
• document.forms[0].elements[2].name<br />
• document.forms[0].age.name<br />
• document.myform.age.name<br />
Robert Tolksdorf und Peter Löhr 26
Prototyp element<br />
• Element eines Formulars<br />
• Typische Eigenschaften:<br />
• type:<br />
• name:<br />
• value:<br />
gemäß <br />
gemäß <br />
gemäß <br />
• Einzige Komponente - nur für Auswahllisten :<br />
• options: das Feld der Wahlmöglichkeiten<br />
• Typische Methoden - simulieren Aktionen des Benutzers:<br />
• focus() wählt Element mit Maus<br />
• blur() annulliert Elementauswahl<br />
• select() markiert Text in ausgewähltem Textfeld<br />
• click() klickt ein clickable Element an<br />
Robert Tolksdorf und Peter Löhr 27
Überprüfung von Formulareingaben<br />
Zur Erinnerung: gothic.html (12-Web-CGI, S. 28),<br />
gothic.php (13-Web-PHP, S. 16)<br />
.....<br />
<br />
First name:<br />
Last name:<br />
Age: <br />
email: <br />
Sex: male<br />
female<br />
<br />
<br />
<br />
.....<br />
Robert Tolksdorf und Peter Löhr 28
Überprüfung von Formulareingaben<br />
Zur Erinnerung: gothic.html (12-Web-CGI, S. 28),<br />
gothic.php (13-Web-PHP, S. 16)<br />
<br />
$sex=='Male' && $age>'70') ||<br />
$sex=='Female' && $age>'75';<br />
Wenn für age korrekt eine natürliche Zahl eingegeben<br />
wurde, funktionieren diese Vergleiche, weil PHP für den<br />
Vergleich die Operanden in die entsprechenden Zahlen<br />
umwandelt! Wenn nicht, gilt z.B. 'xy'>'70' !<br />
Robert Tolksdorf und Peter Löhr 29
Überprüfung von Formulareingaben<br />
gothic.html mit Überprüfung der Eingabe im age-Feld:<br />
<br />
<br />
<br />
function checkAge(val) {<br />
var age = parseInt(val,10);<br />
if (age.toString() == val && val>0 && val
Überprüfung von Formulareingaben<br />
.....<br />
<br />
<br />
First name: <br />
Last name: <br />
Age: <br />
email: <br />
Sex: • onSubmit: male<br />
bildet den Rumpf einer<br />
female<br />
des Form-Objekts.<br />
• Er wird aktiviert, sobald das submit ansteht.<br />
dann ausgeführt, <br />
die Methode<br />
den Wert true liefert.<br />
<br />
• Dem age-Element des Formulars entspricht ein gleichnamiges<br />
Komponenten-Objekt des Form-Objekts; dessen value-<br />
Eigenschaft hat den im Textfeld eingetragenen value-Wert.<br />
Robert Tolksdorf und Peter Löhr 31
Überprüfung von Formulareingaben<br />
Robert Tolksdorf und Peter Löhr 32
Sicherheit<br />
• Mit <strong>JavaScript</strong> Code holt man sich unbekannten Code<br />
aus dem Netz - wie schützt man sich vor Trojanischen<br />
Pferden?<br />
• Sicherheitsstrategie des Browsers (security policy):<br />
• außer Zugriffen <strong>auf</strong> das eigene Dokument wird fast nichts<br />
erlaubt (z.B. keine Dateizugriffe).<br />
• Ausnahme:<br />
• Zugriff <strong>auf</strong> Ressourcen vom gleichen Server über gleichen<br />
Port und gleiches Protokoll (mit w = window.open(URL) )<br />
• Kontrollierte Vergabe weiterer Rechte: ähnlich Java<br />
• Codebasis<br />
• signierte Dokumente<br />
• vgl. Applet-Sicherheit (15-Web-Applets, S. 32)<br />
• MS Internet Explorer: Sicherheitszonen<br />
• http://www.mozilla.org/projects/security/components/jssec.html<br />
http://www.devarticles.com/c/a/<strong>JavaScript</strong>/<strong>JavaScript</strong>-Security/<br />
Robert Tolksdorf und Peter Löhr 33
Empfehlung<br />
Die Web-Ressourcen zur verständlichen und umfassenden<br />
Darstellung von <strong>JavaScript</strong> und der DOM-Umgebung des<br />
Browsers sind dünn gesät.<br />
Eine empfehlenswerte Darstellung und Fundgrube von<br />
instruktiven Beispielen ist<br />
http://de.selfhtml.org/javascript/index.htm<br />
und dort auch zu HTML und anderen Themen rund ums Web:<br />
http://de.selfhtml.org/<br />
(dort auch Hinweise <strong>auf</strong> diese Texte in Buchform)<br />
Robert Tolksdorf und Peter Löhr 34
AJAX - Asynchronous <strong>JavaScript</strong> and XML<br />
Robert Tolksdorf und Peter Löhr
HTTP-Interaktionen und GUI<br />
• Problematik: Durch die Anfrage/Antwort-Interaktion des<br />
HTTP wird bei jeder action ein völlig neues GUI im<br />
Browser <strong>auf</strong>gebaut<br />
Anfrage<br />
GUI 1<br />
Antwort<br />
GUI 2<br />
Client<br />
Anfrage<br />
Antwort<br />
Server<br />
GUI 3<br />
Anfrage<br />
Antwort<br />
Robert Tolksdorf und Peter Löhr 36
Ziel: änderbares GUI<br />
Nur Teile des GUI sollen nach<br />
Benutzerinteraktion mit nachgeladenen<br />
Daten geändert werden.<br />
Robert Tolksdorf und Peter Löhr 37
AJAX<br />
• Asynchronous <strong>JavaScript</strong> and XML (AJAX) realisiert dies<br />
durch Kombination von<br />
• Präsentationssprachen XHTML und CSS<br />
• Interaktion und Modifikation im Browser mit DOM<br />
• Datenaustausch mit XML<br />
• Datentransfer durch asynchrone HTTP-Anfragen<br />
• <strong>JavaScript</strong> integriert diese Technologien<br />
Anfrage<br />
Antwort<br />
GUI 1<br />
Klient<br />
mit AJAX<br />
Anfrage<br />
Antwort<br />
Server<br />
Anfrage<br />
Antwort<br />
Robert Tolksdorf und Peter Löhr 38
AJAX<br />
• <strong>JavaScript</strong> Code im Dokument kann weitere HTTP-Anfrage<br />
starten, deren Antwort das aktuelle Dokument nicht<br />
ersetzt, sondern nur modifiziert.<br />
• Die Anfrage erfolgt mit Hilfe eines XMLHTTP-Objekts,<br />
dessen Konstruktorfunktion von der Umgebung abhängt:<br />
if (window.ActiveXObject)<br />
// IE<br />
http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />
else if (window.XMLHttpRequest) // Mozilla, Safari, ...<br />
http_request = new XMLHttpRequest();<br />
• Funktion f definieren, die festlegt, was beim Eintreffen<br />
der Antwort zu tun ist, und damit:<br />
http_request.onreadystatechange = f<br />
Robert Tolksdorf und Peter Löhr 39
AJAX<br />
• Asynchrone Anfrage starten:<br />
http_request.open('GET', 'http://www.dot.com/some.file', true);<br />
http_request.send(null);<br />
• auch Query String statt null bei Verwendung von POST<br />
• “beim Eintreffen der Antwort” genauer:<br />
• http_request.readyState von 0 bis 4<br />
• bei jeder Zustandsänderung wird die Funktion f <strong>auf</strong>gerufen<br />
• bei Zustand 4 liegt die Antwort vollständig vor<br />
if (http_request.readyState == 4) {<br />
} else {<br />
}<br />
. . . . . . // response received<br />
. . . . . . // still not ready<br />
0 (uninitialized)<br />
1 (loading)<br />
2 (loaded)<br />
3 (interactive)<br />
4 (complete)<br />
Robert Tolksdorf und Peter Löhr 40
AJAX<br />
• HTTP-Statuscode prüfen<br />
if (http_request.status == 200) {<br />
. . . . . . . // perfect!<br />
} else {<br />
. . . . . . . // problem<br />
// 404 (Not Found) ?<br />
// 500 (Internal Server Error) ?<br />
}<br />
(Siehe<br />
https://developer.mozilla.org/en/AJAX/Getting_Started<br />
http://www.brainjar.com/dhtml/ajax/default2.asp )<br />
Robert Tolksdorf und Peter Löhr 41
AJAX: Beispiel<br />
<br />
var httpRequest;<br />
function makeRequest(url) {<br />
httpRequest = false;<br />
if (window.XMLHttpRequest) // Mozilla, Safari,...<br />
httpRequest = new XMLHttpRequest();<br />
else if (window.ActiveXObject) // IE<br />
try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }<br />
catch (e) {<br />
try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }<br />
catch (e) {} }<br />
if (!httpRequest) {<br />
alert('Giving up: Cannot create an XMLHTTP instance');<br />
return false; }<br />
httpRequest.onreadystatechange = alertContents;<br />
httpRequest.open('GET', url, true);<br />
httpRequest.send(null);<br />
} // end function makeRequest<br />
asynchron<br />
Query String bei POST<br />
Robert Tolksdorf und Peter Löhr 42
AJAX: Beispiel<br />
function alertContents() {<br />
if (httpRequest.readyState == 4)<br />
if (httpRequest.status == 200)<br />
alert(httpRequest.responseText);<br />
else alert('There was a problem with the request.');<br />
}<br />
<br />
<br />
Make a request<br />
<br />
Verbleibendes Problem: eventuelle nichtdeterministische Effekte<br />
über die globale Variable httpRequest bei nebenläufigen<br />
makeRequests. (Leicht behebbar - s.o. Mozilla Website.)<br />
Robert Tolksdorf und Peter Löhr 43
AJAX: Beispiel mit XML<br />
• test.xml:<br />
<br />
<br />
<br />
• Im HTML:<br />
I'm a test.<br />
... onclick="makeRequest('test.xml')"> ...<br />
• Verarbeitung in alertContents:<br />
var xmldoc = httpRequest.responseXML;<br />
var root_node =<br />
xmldoc.getElementsByTagName('root').item(0);<br />
alert(root_node.firstChild.data);<br />
Robert Tolksdorf und Peter Löhr 44
Zusammenfassung<br />
Robert Tolksdorf und Peter Löhr
Zusammenfassung<br />
• Javascript<br />
• Mehrparadigmen-Sprache, eingebettet in Web-Seiten<br />
• Zugriff <strong>auf</strong> Dokumentenstruktur im Browser gemäß DOM<br />
• Ereignisgesteuerte Ausführung<br />
• Sicherheit!<br />
• AJAX<br />
• Dynamische Veränderung von GUI-Teilen<br />
• ermöglicht durch asynchronen HTTP-Zugriff und<br />
Veränderung des Dokuments<br />
Robert Tolksdorf und Peter Löhr 46
Literatur<br />
• St. Münz: Web-Seiten professionell erstellen (3.Aufl.). Addison-<br />
Wesley 2008<br />
(Siehe auch SelfHTML: http://www.selfhtml.org)<br />
• D. Flanagan: <strong>JavaScript</strong> (5.ed.). O‘Reilly 2006<br />
• Mozilla Developer Center: <strong>JavaScript</strong>.<br />
https://developer.mozilla.org/en/<strong>JavaScript</strong><br />
• Mozilla Developer Center: <strong>JavaScript</strong> Security.<br />
http://www.mozilla.org/projects/security/components/jssec.html<br />
• Mozilla Developer Center: AJAX.<br />
http://developer.mozilla.org/en/docs/AJAX<br />
Robert Tolksdorf und Peter Löhr 47