29.06.2015 Aufrufe

JavaScript - auf Matthias-Draeger.info

JavaScript - auf Matthias-Draeger.info

JavaScript - auf Matthias-Draeger.info

MEHR ANZEIGEN
WENIGER ANZEIGEN

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&auml;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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!