Einführung in Javascript -...

37
HOCHSCHULE FÜR TECHNIK UND WIRTSCHAFT DRESDEN (FH) Fachbereich Informatik/Mathematik Prof. Dr.-Ing. Thomas Wiedemann email: [email protected] Vorlesungsreihe EwA Einführung in Javascript

Transcript of Einführung in Javascript -...

HOCHSCHULE FUumlR TECHNIK UND WIRTSCHAFT DRESDEN (FH)Fachbereich InformatikMathematik

Prof Dr-Ing Thomas Wiedemann email wiedeminformatikhtw-dresdende

Vorlesungsreihe EwA

Einfuumlhrung in Javascript

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 2

JavaScript Einfuumlhrung Historie Abgrenzung zu Java Grundlegende Technologien amp Syntax Beispiele

Ajax

Quelle(n) [1] Selfhtml httpwikiselfhtmlorgwikiJavaScript[2] W3School_JS httpwwww3schoolscomjsdefaultaspund viele weitere Buumlcher und Webseiten

Gliederung

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 3

Uumlbersicht zu Javascriptbull JavaScript ist keine direkte Ableitung von Sunacutes JAVA sondern eine

Eigenentwicklung von Netscape aus dem Jahre 1995bull Hauptziel ist die Client-seitige Manipulation des Dokumentes im Browserbull wie bei HTML bestehen zum Teil erhebliche Unterschiede bei der Unterstuumltzung

der JavaScript-Versionen durch die Browser ndash kurze Versionshistorie JavaScript wurde eingefuumlhrt durch Brendan Eich zur Verwendung im

Netscape Browser im Jahr 1995 Sprache wurde standardisiert durch ECMA Standard association in 1997

Offizieller Name ECMA-262 (Aktuelle Versionen 185 = ECMAScript 5 from July 2010 Link httpwwwecma-internationalorgecma-26260 ECMAScript 3 (1999) with regular epressions more string functions trycatch ECMAScript 5 (2009) new bdquostrict modeldquo with improved error checking JSON-support Subversion 51 from June 2011 ECMAScript 2015 (before called Version 6 - ldquoHarmonyrdquo) new syntax for complex

apps new options like forof ndash loops ECMAScript 2016 draft since June 2016

httpwwwecma-internationalorgecma-26270indexhtml

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 4

Unterstuumltzung durch die JavaScript-engines bull Die verschiedenen Versionen werden nur sehr unterschiedlich unterstuumltzt bull httpkangaxgithubiocompat-tablees5

Wichtigbull Die neuen Sprachfunktionen werden nur

von neuen JS-Engines unterstuumltzt bull Testen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 5

Einbindung von Javascript in HTML-Seitenbull Javascript-Code wird entweder

zwischen ltscriptgt-Tags (meist im Header oder zu Beginn ) eingebunden oder aus einer externen Datei geladen (Erw js) oder in HTML-Tags zum Aufruf komplexerer Funktionen verwendet

bull Das Attribut bdquotextjavascriptldquo ist in HTML5 nicht mehr notwendig

lthtmlgtltheadgtlttitlegtTestlttitlegt ltscript type=textjavascriptgt

alert(Hallo Welt) ltscriptgt ltheadgt ltbodygt ltbodygt

ltscript src=quadratjsldquogtltscriptgt ltinput type=button value=Quadrat errechnen onClick=Quadrat() gt lthtmlgt

function Quadrat() var Ergebnis = documentFormularEingabevalue documentFormularEingabevalue alert(Das Quadrat von + documentFormularEingabevalue + = + Ergebnis)

Datei quadratjs

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 6

Allgemeine Syntax-Regeln fuumlr JavaScript

bull generelle Schreibweise an Java angelehnt wenn auch nicht 100 igbull Anweisungen werden mit abgeschlossen (nicht zwingend notwendig aber

zwecks Kompatibilitaumlt zu Java sehr sinnvoll ) Quadrat = Zahl Zahlbull Achtung automatic semicolon insertion (ASI) behebt - Fehler teilweise bull Anweisungsbloumlcke zur Zusammenfassung groumlszligerer Anweisungsbloumlcke mit

insbesondere bei Schleifen und Bedingungen if (Zahl gt 1000) Zahl = 0 Neustart()

bull Alle Schleifen und Bedingungen werden analog zu JAVA bzw C unterstuumltztif () else while ()

bull Eigene Bezeichner analog zu JAVA keine Leerzeichen nur Buchstaben und Ziffern (Keine Umlaute) und _ - erstes Zeichen muss ein Buchstabe sein - Groszlig- und Kleinschreibung werden unterschieden

bull Kommentare mit oder

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 7

JavaScript Daten Typen Definitionbull numerische und nicht-numerische Typen bull Der Identifier var kann (muss aber nicht) verwendet werden var i = 0

(siehe auch Scope-Anmerkungen)

Javascript erlaubt die meisten bekannten Datentypen var length = 16 Integer Number - aber intern als 64bit floatvar length = 165 Float Number

Generell werden alle Zahlen intern als 64bit-Float repraumlsentiert var points = x 10 Number assigned by an expression literalvar lastName = Johnson String assigned by a string literalvar x = true var y = false boolean

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefined ndash ergibt bei Ausgabe bdquoundefinedldquo var x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 2

JavaScript Einfuumlhrung Historie Abgrenzung zu Java Grundlegende Technologien amp Syntax Beispiele

Ajax

Quelle(n) [1] Selfhtml httpwikiselfhtmlorgwikiJavaScript[2] W3School_JS httpwwww3schoolscomjsdefaultaspund viele weitere Buumlcher und Webseiten

Gliederung

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 3

Uumlbersicht zu Javascriptbull JavaScript ist keine direkte Ableitung von Sunacutes JAVA sondern eine

Eigenentwicklung von Netscape aus dem Jahre 1995bull Hauptziel ist die Client-seitige Manipulation des Dokumentes im Browserbull wie bei HTML bestehen zum Teil erhebliche Unterschiede bei der Unterstuumltzung

der JavaScript-Versionen durch die Browser ndash kurze Versionshistorie JavaScript wurde eingefuumlhrt durch Brendan Eich zur Verwendung im

Netscape Browser im Jahr 1995 Sprache wurde standardisiert durch ECMA Standard association in 1997

Offizieller Name ECMA-262 (Aktuelle Versionen 185 = ECMAScript 5 from July 2010 Link httpwwwecma-internationalorgecma-26260 ECMAScript 3 (1999) with regular epressions more string functions trycatch ECMAScript 5 (2009) new bdquostrict modeldquo with improved error checking JSON-support Subversion 51 from June 2011 ECMAScript 2015 (before called Version 6 - ldquoHarmonyrdquo) new syntax for complex

apps new options like forof ndash loops ECMAScript 2016 draft since June 2016

httpwwwecma-internationalorgecma-26270indexhtml

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 4

Unterstuumltzung durch die JavaScript-engines bull Die verschiedenen Versionen werden nur sehr unterschiedlich unterstuumltzt bull httpkangaxgithubiocompat-tablees5

Wichtigbull Die neuen Sprachfunktionen werden nur

von neuen JS-Engines unterstuumltzt bull Testen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 5

Einbindung von Javascript in HTML-Seitenbull Javascript-Code wird entweder

zwischen ltscriptgt-Tags (meist im Header oder zu Beginn ) eingebunden oder aus einer externen Datei geladen (Erw js) oder in HTML-Tags zum Aufruf komplexerer Funktionen verwendet

bull Das Attribut bdquotextjavascriptldquo ist in HTML5 nicht mehr notwendig

lthtmlgtltheadgtlttitlegtTestlttitlegt ltscript type=textjavascriptgt

alert(Hallo Welt) ltscriptgt ltheadgt ltbodygt ltbodygt

ltscript src=quadratjsldquogtltscriptgt ltinput type=button value=Quadrat errechnen onClick=Quadrat() gt lthtmlgt

function Quadrat() var Ergebnis = documentFormularEingabevalue documentFormularEingabevalue alert(Das Quadrat von + documentFormularEingabevalue + = + Ergebnis)

Datei quadratjs

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 6

Allgemeine Syntax-Regeln fuumlr JavaScript

bull generelle Schreibweise an Java angelehnt wenn auch nicht 100 igbull Anweisungen werden mit abgeschlossen (nicht zwingend notwendig aber

zwecks Kompatibilitaumlt zu Java sehr sinnvoll ) Quadrat = Zahl Zahlbull Achtung automatic semicolon insertion (ASI) behebt - Fehler teilweise bull Anweisungsbloumlcke zur Zusammenfassung groumlszligerer Anweisungsbloumlcke mit

insbesondere bei Schleifen und Bedingungen if (Zahl gt 1000) Zahl = 0 Neustart()

bull Alle Schleifen und Bedingungen werden analog zu JAVA bzw C unterstuumltztif () else while ()

bull Eigene Bezeichner analog zu JAVA keine Leerzeichen nur Buchstaben und Ziffern (Keine Umlaute) und _ - erstes Zeichen muss ein Buchstabe sein - Groszlig- und Kleinschreibung werden unterschieden

bull Kommentare mit oder

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 7

JavaScript Daten Typen Definitionbull numerische und nicht-numerische Typen bull Der Identifier var kann (muss aber nicht) verwendet werden var i = 0

(siehe auch Scope-Anmerkungen)

Javascript erlaubt die meisten bekannten Datentypen var length = 16 Integer Number - aber intern als 64bit floatvar length = 165 Float Number

Generell werden alle Zahlen intern als 64bit-Float repraumlsentiert var points = x 10 Number assigned by an expression literalvar lastName = Johnson String assigned by a string literalvar x = true var y = false boolean

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefined ndash ergibt bei Ausgabe bdquoundefinedldquo var x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 3

Uumlbersicht zu Javascriptbull JavaScript ist keine direkte Ableitung von Sunacutes JAVA sondern eine

Eigenentwicklung von Netscape aus dem Jahre 1995bull Hauptziel ist die Client-seitige Manipulation des Dokumentes im Browserbull wie bei HTML bestehen zum Teil erhebliche Unterschiede bei der Unterstuumltzung

der JavaScript-Versionen durch die Browser ndash kurze Versionshistorie JavaScript wurde eingefuumlhrt durch Brendan Eich zur Verwendung im

Netscape Browser im Jahr 1995 Sprache wurde standardisiert durch ECMA Standard association in 1997

Offizieller Name ECMA-262 (Aktuelle Versionen 185 = ECMAScript 5 from July 2010 Link httpwwwecma-internationalorgecma-26260 ECMAScript 3 (1999) with regular epressions more string functions trycatch ECMAScript 5 (2009) new bdquostrict modeldquo with improved error checking JSON-support Subversion 51 from June 2011 ECMAScript 2015 (before called Version 6 - ldquoHarmonyrdquo) new syntax for complex

apps new options like forof ndash loops ECMAScript 2016 draft since June 2016

httpwwwecma-internationalorgecma-26270indexhtml

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 4

Unterstuumltzung durch die JavaScript-engines bull Die verschiedenen Versionen werden nur sehr unterschiedlich unterstuumltzt bull httpkangaxgithubiocompat-tablees5

Wichtigbull Die neuen Sprachfunktionen werden nur

von neuen JS-Engines unterstuumltzt bull Testen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 5

Einbindung von Javascript in HTML-Seitenbull Javascript-Code wird entweder

zwischen ltscriptgt-Tags (meist im Header oder zu Beginn ) eingebunden oder aus einer externen Datei geladen (Erw js) oder in HTML-Tags zum Aufruf komplexerer Funktionen verwendet

bull Das Attribut bdquotextjavascriptldquo ist in HTML5 nicht mehr notwendig

lthtmlgtltheadgtlttitlegtTestlttitlegt ltscript type=textjavascriptgt

alert(Hallo Welt) ltscriptgt ltheadgt ltbodygt ltbodygt

ltscript src=quadratjsldquogtltscriptgt ltinput type=button value=Quadrat errechnen onClick=Quadrat() gt lthtmlgt

function Quadrat() var Ergebnis = documentFormularEingabevalue documentFormularEingabevalue alert(Das Quadrat von + documentFormularEingabevalue + = + Ergebnis)

Datei quadratjs

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 6

Allgemeine Syntax-Regeln fuumlr JavaScript

bull generelle Schreibweise an Java angelehnt wenn auch nicht 100 igbull Anweisungen werden mit abgeschlossen (nicht zwingend notwendig aber

zwecks Kompatibilitaumlt zu Java sehr sinnvoll ) Quadrat = Zahl Zahlbull Achtung automatic semicolon insertion (ASI) behebt - Fehler teilweise bull Anweisungsbloumlcke zur Zusammenfassung groumlszligerer Anweisungsbloumlcke mit

insbesondere bei Schleifen und Bedingungen if (Zahl gt 1000) Zahl = 0 Neustart()

bull Alle Schleifen und Bedingungen werden analog zu JAVA bzw C unterstuumltztif () else while ()

bull Eigene Bezeichner analog zu JAVA keine Leerzeichen nur Buchstaben und Ziffern (Keine Umlaute) und _ - erstes Zeichen muss ein Buchstabe sein - Groszlig- und Kleinschreibung werden unterschieden

bull Kommentare mit oder

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 7

JavaScript Daten Typen Definitionbull numerische und nicht-numerische Typen bull Der Identifier var kann (muss aber nicht) verwendet werden var i = 0

(siehe auch Scope-Anmerkungen)

Javascript erlaubt die meisten bekannten Datentypen var length = 16 Integer Number - aber intern als 64bit floatvar length = 165 Float Number

Generell werden alle Zahlen intern als 64bit-Float repraumlsentiert var points = x 10 Number assigned by an expression literalvar lastName = Johnson String assigned by a string literalvar x = true var y = false boolean

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefined ndash ergibt bei Ausgabe bdquoundefinedldquo var x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 4

Unterstuumltzung durch die JavaScript-engines bull Die verschiedenen Versionen werden nur sehr unterschiedlich unterstuumltzt bull httpkangaxgithubiocompat-tablees5

Wichtigbull Die neuen Sprachfunktionen werden nur

von neuen JS-Engines unterstuumltzt bull Testen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 5

Einbindung von Javascript in HTML-Seitenbull Javascript-Code wird entweder

zwischen ltscriptgt-Tags (meist im Header oder zu Beginn ) eingebunden oder aus einer externen Datei geladen (Erw js) oder in HTML-Tags zum Aufruf komplexerer Funktionen verwendet

bull Das Attribut bdquotextjavascriptldquo ist in HTML5 nicht mehr notwendig

lthtmlgtltheadgtlttitlegtTestlttitlegt ltscript type=textjavascriptgt

alert(Hallo Welt) ltscriptgt ltheadgt ltbodygt ltbodygt

ltscript src=quadratjsldquogtltscriptgt ltinput type=button value=Quadrat errechnen onClick=Quadrat() gt lthtmlgt

function Quadrat() var Ergebnis = documentFormularEingabevalue documentFormularEingabevalue alert(Das Quadrat von + documentFormularEingabevalue + = + Ergebnis)

Datei quadratjs

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 6

Allgemeine Syntax-Regeln fuumlr JavaScript

bull generelle Schreibweise an Java angelehnt wenn auch nicht 100 igbull Anweisungen werden mit abgeschlossen (nicht zwingend notwendig aber

zwecks Kompatibilitaumlt zu Java sehr sinnvoll ) Quadrat = Zahl Zahlbull Achtung automatic semicolon insertion (ASI) behebt - Fehler teilweise bull Anweisungsbloumlcke zur Zusammenfassung groumlszligerer Anweisungsbloumlcke mit

insbesondere bei Schleifen und Bedingungen if (Zahl gt 1000) Zahl = 0 Neustart()

bull Alle Schleifen und Bedingungen werden analog zu JAVA bzw C unterstuumltztif () else while ()

bull Eigene Bezeichner analog zu JAVA keine Leerzeichen nur Buchstaben und Ziffern (Keine Umlaute) und _ - erstes Zeichen muss ein Buchstabe sein - Groszlig- und Kleinschreibung werden unterschieden

bull Kommentare mit oder

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 7

JavaScript Daten Typen Definitionbull numerische und nicht-numerische Typen bull Der Identifier var kann (muss aber nicht) verwendet werden var i = 0

(siehe auch Scope-Anmerkungen)

Javascript erlaubt die meisten bekannten Datentypen var length = 16 Integer Number - aber intern als 64bit floatvar length = 165 Float Number

Generell werden alle Zahlen intern als 64bit-Float repraumlsentiert var points = x 10 Number assigned by an expression literalvar lastName = Johnson String assigned by a string literalvar x = true var y = false boolean

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefined ndash ergibt bei Ausgabe bdquoundefinedldquo var x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 5

Einbindung von Javascript in HTML-Seitenbull Javascript-Code wird entweder

zwischen ltscriptgt-Tags (meist im Header oder zu Beginn ) eingebunden oder aus einer externen Datei geladen (Erw js) oder in HTML-Tags zum Aufruf komplexerer Funktionen verwendet

bull Das Attribut bdquotextjavascriptldquo ist in HTML5 nicht mehr notwendig

lthtmlgtltheadgtlttitlegtTestlttitlegt ltscript type=textjavascriptgt

alert(Hallo Welt) ltscriptgt ltheadgt ltbodygt ltbodygt

ltscript src=quadratjsldquogtltscriptgt ltinput type=button value=Quadrat errechnen onClick=Quadrat() gt lthtmlgt

function Quadrat() var Ergebnis = documentFormularEingabevalue documentFormularEingabevalue alert(Das Quadrat von + documentFormularEingabevalue + = + Ergebnis)

Datei quadratjs

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 6

Allgemeine Syntax-Regeln fuumlr JavaScript

bull generelle Schreibweise an Java angelehnt wenn auch nicht 100 igbull Anweisungen werden mit abgeschlossen (nicht zwingend notwendig aber

zwecks Kompatibilitaumlt zu Java sehr sinnvoll ) Quadrat = Zahl Zahlbull Achtung automatic semicolon insertion (ASI) behebt - Fehler teilweise bull Anweisungsbloumlcke zur Zusammenfassung groumlszligerer Anweisungsbloumlcke mit

insbesondere bei Schleifen und Bedingungen if (Zahl gt 1000) Zahl = 0 Neustart()

bull Alle Schleifen und Bedingungen werden analog zu JAVA bzw C unterstuumltztif () else while ()

bull Eigene Bezeichner analog zu JAVA keine Leerzeichen nur Buchstaben und Ziffern (Keine Umlaute) und _ - erstes Zeichen muss ein Buchstabe sein - Groszlig- und Kleinschreibung werden unterschieden

bull Kommentare mit oder

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 7

JavaScript Daten Typen Definitionbull numerische und nicht-numerische Typen bull Der Identifier var kann (muss aber nicht) verwendet werden var i = 0

(siehe auch Scope-Anmerkungen)

Javascript erlaubt die meisten bekannten Datentypen var length = 16 Integer Number - aber intern als 64bit floatvar length = 165 Float Number

Generell werden alle Zahlen intern als 64bit-Float repraumlsentiert var points = x 10 Number assigned by an expression literalvar lastName = Johnson String assigned by a string literalvar x = true var y = false boolean

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefined ndash ergibt bei Ausgabe bdquoundefinedldquo var x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 6

Allgemeine Syntax-Regeln fuumlr JavaScript

bull generelle Schreibweise an Java angelehnt wenn auch nicht 100 igbull Anweisungen werden mit abgeschlossen (nicht zwingend notwendig aber

zwecks Kompatibilitaumlt zu Java sehr sinnvoll ) Quadrat = Zahl Zahlbull Achtung automatic semicolon insertion (ASI) behebt - Fehler teilweise bull Anweisungsbloumlcke zur Zusammenfassung groumlszligerer Anweisungsbloumlcke mit

insbesondere bei Schleifen und Bedingungen if (Zahl gt 1000) Zahl = 0 Neustart()

bull Alle Schleifen und Bedingungen werden analog zu JAVA bzw C unterstuumltztif () else while ()

bull Eigene Bezeichner analog zu JAVA keine Leerzeichen nur Buchstaben und Ziffern (Keine Umlaute) und _ - erstes Zeichen muss ein Buchstabe sein - Groszlig- und Kleinschreibung werden unterschieden

bull Kommentare mit oder

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 7

JavaScript Daten Typen Definitionbull numerische und nicht-numerische Typen bull Der Identifier var kann (muss aber nicht) verwendet werden var i = 0

(siehe auch Scope-Anmerkungen)

Javascript erlaubt die meisten bekannten Datentypen var length = 16 Integer Number - aber intern als 64bit floatvar length = 165 Float Number

Generell werden alle Zahlen intern als 64bit-Float repraumlsentiert var points = x 10 Number assigned by an expression literalvar lastName = Johnson String assigned by a string literalvar x = true var y = false boolean

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefined ndash ergibt bei Ausgabe bdquoundefinedldquo var x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 7

JavaScript Daten Typen Definitionbull numerische und nicht-numerische Typen bull Der Identifier var kann (muss aber nicht) verwendet werden var i = 0

(siehe auch Scope-Anmerkungen)

Javascript erlaubt die meisten bekannten Datentypen var length = 16 Integer Number - aber intern als 64bit floatvar length = 165 Float Number

Generell werden alle Zahlen intern als 64bit-Float repraumlsentiert var points = x 10 Number assigned by an expression literalvar lastName = Johnson String assigned by a string literalvar x = true var y = false boolean

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefined ndash ergibt bei Ausgabe bdquoundefinedldquo var x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 8

Der Scope von JavaScript Variablen Konstanten Definitionen AUSSERHALB von Funktionen sind GLOBAL

var j k = 1 global

Definitionen innerhalb MIT VAR in Funktionen sind LOKAL function myFunction(p1 p2)

var i = 2 this i is visible only inside this function return p1 p2acute i

Achtung Def OHNE var sind GLOBAL (kann ggf kritisch sein )

function myFunction(p1 p2) i = 2 this i is visible GLOBALalso outside the function return p1 p2acute i

Definitionen von Konstanten mit const

const plz = 01069

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 9

Der bdquostrictldquo - mode Automatische Definition bei erste Verwendung global

xyz = 1 automatic definition without var

Unbeabsichtigte Schreibfehler definieren damit eine neue Variable (sehr schlecht zu finden und zu debuggen Folgefehler

xzy = 3 new variable (which was not intended hellip)

Neuer ldquostrict moderdquo ab ECMAScript 5 generiert error-messageuse strict new strict directive var xyz = 1 ok

xzy = 3 error message in console window

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 10

JavaScript-Arrays Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern wird ein Array als ein spezielles Objekt (mit entspr

Methoden) und einer numerischen Indexierung (vgl auch JS-Objekte) Zugriff und Interation uumlber Arrays

arr[0] = 11 erstes Element wird mit 0 referenziert for (var i = 0 i lt arrlength i++) length ndash liefert Array-Laumlnge als N+1

consolelog( arr[i]) arrforEach(function(color) 2 Option mit foreach und Funktion

consolelog(color) ) ignoriert leere Elementearrlength = n loumlscht Array bei n= 0 oder setzt neue Laumlnge

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 11

JavaScript-Array-Funktionen Array-Management (immer auf Basis von arr = [123] )bull Zusammenfuumlgen arr = arrconcat(ldquo4 ldquo5) arr = [ 123 ldquo4rdquordquo5rdquo]bull Nach Text wandeln var text = arrjoin (ldquo+ldquo) text = ldquo1+2+3rdquo bull Letztes Element holen var last = arrpop() arr = [12] last = 3bull Element am Ende hinzufuumlgen arrpush(4) arr = [1234]bull Erstes Element holen var first = arrshift() arr = [23] first = 1bull Element am Ende hinzufuumlgen arrunshift(0) arr = [0123]bull Vollstaumlndige Liste der Meth httpwwww3schoolscomjsrefjsref_obj_arrayasp

Sortierenbull Reversieren arr reverse() arr [ 321 ]bull Sortieren arrsort() Achtung ndash sortiert nur alphabetisch (nach String)bull var arr2 = [ 330 110] arr2sort() -gt [ 110330 ] bei numerischen Elementen muss entspr Vergleichsfunktion definiert werdenbull arr2sort( function(a b) return a - b) =gt [ 13 10 30 ]

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 12

JavaScript Funktionen Funktionen werden mit dem Keyword bdquofunctionldquo definiert

function Name(parameter1 parameter2 parameter3) code of the function hellip

return ret_value bull Die Parameter werden typenlos definiert bull Optional kann mit return hellip ein Ruumlckgabewert zuruumlck gegeben werden Bsp einer Funktionsdefinition

function myFunction(p1 p2) return p1 p2 the function returns the product of p1 and p2

Aufruf der Funktion - Direkt aus dem Code var myresult = myFunction(10 20) - Durch Einbau in Event-Handler (siehe Events) -gt ldquohellipldquo beachten

ltinput type=button onclick= myFunction(10 20) gtAchtung Es erfolgt keine automatische Parameterlistenpruumlfung ndash ggf selbst erledigen

if (b === undefined) b = 1 - uumlber die Methode arguments kann ein Abruf ALLER AKT Parameter erfolgen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 13

JavaScript Funktions ndash Expressions

Funktionen koumlnnen auch einer Variable zugeordnet und aufgerufen werden var myfunc = function myfunction (p1 p2) return p1 p2

Aufruf der Funktion var x = myfunc ( 34 )

bull da der Aufruf uumlber die Variablenzuweisung laumluft kann der Funktionsname auch weggelassen werden -gt sog anonyme Funktionen

var myfunc = function (p1 p2) return p1 p2 Spezielle JavaScript ndash Eigenschaften 1 Hoisting Deklarationen (auch var hellip) werden AN DEN ANFANG gesetzt

myfunc(4 5)function myfunc(ab) return a b

Automatischer bdquoSelbst-Aufrufldquo der Funktion (self-invoking)

( function myfunction (p1 p2)

return p1 p2 ) ( )

function myfunc(ab) return a b

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 14

JavaScript-Objects Allgemeinesbull In JavaScript sind fast alle Sprachelemente OBJEKTE (mit Ausnahme der

primitiven Datentypen aber auch diese koumlnnen als Objekte gewrappt werden) bull JavaScript stellt aber kein herkoumlmmlicher OO-Klassensystem zur Verfuumlgung

sondern orientiert auf die direkte Definition und Verwendung von Objekten bull (vgl Konzept bdquoObject composition over class inheritancerdquo) bull JS-Objekte sind aumlhnlich zu assoziativen PHP-Listen oder C-HashtablesDefinition und Initialisierung 3 Optionen der Anlage bull var x1 = firstNameTom age 25 Object definition with Literalbull var x2 = new Object() Instanzierung eines leeren Objektes mit new und

x2firstname = ldquoTomldquo x2age = 25 Deklaration und Belegung der Wertepaare - Definition einer Konstruktorfunktion und mehrmaliger Aufruf

function Person ( name age ) thisfirstname = name thisage = age

var p1 = Person (ldquotomldquo 25) var p2 = Person (ldquoEvaldquo 21)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 15

JavaScript-Objects ndash Zugriff und Referenzierung

Zugriffsoptionen bull Dot-Syntax x1firstNamebull Array-Syntax x1[ldquoageldquo] oder auch mit name=bdquoageldquo x2[name]bull Zugriff auf alle Eigenschaften eines Objektes

for ( xvalue in x1 ) text += x1 [xvalue]

Manipulation bull JS-Objekte koumlnnen auch nach der Deklaration geaumlndert werden bull Neue Eigenschaft (Attribut) x1newvalue = ldquo123ldquo bull Eigenschaft loumlschen delete x1newvalue

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 16

JavaScript-Objects ndash Methoden

Definition bull Als Objekteigenschaft uumlber die verschiedenen Objektdeklarationen bull Syntax methodenname function ( parameter ) code bull Bsp changeName = function (name) thisfirstname = name bull oder in Objektkonstrukturfunktion

hellip thischangeName = function (name) thisfirstname = name

Aufruf bull objektfunktionsname (parameter) bull Bsp p1changename(ldquoLisaldquo) bull Achtung Immer Methodenaufruf mit ()

ndash sonst wird Funktionsdefinition ausgegeben

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 17

JavaScript-Objects ndash Prototypen

Allgemein Objektprototypen sind ein gewisser Ersatz fuumlr die fehlende Vererbungshierarchie in JavaScript

Jede Objektinstanz hat einen Prototypen bull Entweder die vorab definierte Konstruktorfunktionbull oder das Object ndash Objekt von JS selbst

bull Uumlber die Eigenschaft prototype koumlnnen auch nachtraumlglich neue Eigenschaften oder Methoden zu einem prototype hinzugefuumlgt werden

Personprototypeadress = ldquoDresdenldquo

PersonprototypechangeAdress = function ( newAdress ) adresse = NewAdress

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 18

JavaScript-Objects ndash JSON

JSON (JavaScript Object Notation)

bull definiert ein Format zum Datenaustausch bull entspricht der JS-Objektsyntax wobei die Objekteigenschaften aber

definitiv in Hochkommata geschrieben werden muumlssen ldquofirstName ldquo ldquoTom ldquoageldquo ldquo25ldquo

bull JSON-Array var text = employees[ firstNameJohn lastName Muller

firstNameAnna lastNameSmith ] bull JSON-Notationen koumlnnen sehr leicht in JS-Objekte gewandelt werden

var obj = JSONparse(text)bull und Umwandlung eines Objektes in JSON

var text2 = JSONstringify(obj)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 19

JavaScript-Sets und Maps Definition und Initialisierung 3 Optionen der Anlage bull var arr = Array(123) Anlage von 3 Elementen und Initialisierung bull var arr = [123] analoge Kurzform (meist bevorzugt)bull var arr = new Array(123) als neues Objekt bull Achtung bei Einzelwert Array(10) interpretiert 10 als Elementanzahl bull Mischbelegungen moumlglich Array(1 2 bdquoldquoWert3ldquo true 5 )bull Hinweis intern werden Array als Maps (siehe entspr Folie gespeichert) bull var lastName = Johnson String assigned by a string literal

var cars = [Saab Volvo BMW] Array - Definition var x = firstNameJohn lastNameDoe Object definition

JS-Variable sind dynamisch definiert ndash der Typ kann zur Laufzeit modifiziert werden

var x x is undefinedvar x = 5 Now x is a Numbervar x = John Now x is a String

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 20

Hilfreiche JavaScript-Befehlebull Normale Messageboxen werden angezeigt mit

ltscript type=textjavascriptgt alert(Hallo Welt + zahl ) ltscriptgt bull Zur Intepretation von Rechenanweisungen zur Laufzeit kann mit eval ein

mathematischer Ausdruck ausgewertet werden (aber moumlglichst nicht auf Eingabewerten des Nutzers (Sicherheitsprobleme) function Rechne (Operation)

var Ergebnis = eval(Operation) alert(Ergebnis + Ergebnis)

bull Fehler koumlnnen mit onerror abgefangen werden ltscript type=textjavascriptgt

windowonerror = Fehlerbehandlungfunction Fehlerbehandlung (Nachricht Datei Zeile) Fehler = Fehlermeldungn + Nachricht + n + Datei + n + Zeilealert(Fehler) return true

nichtda() Aufruf einer nicht existenten Funktion ltscriptgt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 21

Anbindung von Javascript an Browser-Events bull Das W3C-Konsortium hat in HTML entsprechende Event-Handler definiert

welche bei Ausloumlsen der entsprechenden Aktion das Script aufrufen onAbort (bei Abbruch)onBlur (beim Verlassen)onChange (bei erfolgter Aumlnderung)onClick (beim Anklicken) onDblClick (bei doppeltem Anklicken)onError (im Fehlerfall)onFocus (beim Aktivieren)onKeydown (bei gedruumlckter Taste) onKeypress (bei gedruumlckt gehaltener Taste)onKeyup (bei losgelassener Taste)onLoad (beim Laden einer Datei)onMousedown (bei gedruumlckter Maustaste) onMousemove (bei bewegter Maus)onMouseout (beim Verlassen des Elements mit der Maus)onMouseover (beim Uumlberfahren des Elements mit der Maus)onMouseUp (bei losgelassener Maustaste)onReset (beim Zuruumlcksetzen des Formulars)onSelect (beim Selektieren von Text)onSubmit (beim Absenden des Formulars)onUnload (beim Verlassen der Datei)javascript (bei Verweisen)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 22

Javascript - Objektreferenzbull Die Eventhandler stehen in Bezug zu allen sichtbaren und unsichtbaren

Bestandteilen des Browsers Diese Bestandteile werden durch die JavaScript-Objekthierarchie definiert

window (Anzeigefenster) frames (Frame-Fenster)document (Dokument im Anzeigefenster)HTML-Elementobjekte (Alle HTML-Elemente des Dokuments)node (Alle Knoten des Elementenbaums)all (Alle HTML-Elemente des Dokuments - Microsoft)style (CSS-Attribute von HTML-Elementen)anchors (Verweisanker im Dokument)applets (Java-Applets im Dokument)forms (Formulare im Dokument)elements (Formularelemente eines Formulars)options (Optionen einer Auswahlliste eines Formulars)images (Grafikreferenzen im Dokument)layers (Layer im Dokument - Netscape)links (Verweise im Dokument)event (Anwenderereignisse) history (besuchte Seiten)location (URIs) Array (Ketten von Variablen)Boolean (JaNein-Variablen) Date (Datum und Uhrzeit)Function (JavaScript-Funktionen)

Hierarchie

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 23

Referenzierung von HTML-Elementen mit JavaScript

bull Die Methode getElementById sucht die erste Referenz mit einer gegebenen ID and fuumlhrt die danach angegebene Aktion aus

bull Haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM (Document Object model (DOM) ndash siehe Folgeseiten )

bull Beispiel ltbutton onclick=changetext()gtChange textltbuttongtltscriptgtfunction changetext()

alert( documentgetElementById(demo)innerHTML ) documentgetElementById(demo)innerHTML = NewText

ltscriptgt

ltp id=demogt Old text ltpgt ltscriptgt

bull innerHTML() referenziert auf den Haupt-HTML-Inhalt

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 24

Andere Methoden zum Referenzieren bull Methode getElementsByTagName) sucht alle Elemente mit Tag-Namen bull Sinnvoll fuumlr Massenaktionen (meist kein eindeutige Referenz)

bull Analog mit getElementsByClassName suchen ach Class-Names

bull Ebenfalls haumlufig verwendet zum Auslesen oder Setzen von HTML-Elementen innerhalb des DOM

bull Beispiel function changetext()

documentgetElementsByClassName(d2)innerHTML = NewText

ltscriptgtltp class=d2gt Old text ltpgt ltscriptgt

Referenzierung von HTML-Elementen mit JavaScript II

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 25

Typische Aufgabe ndash Pruumlfung von Formulareingabenltscript type=textjavascriptgt function checkeFormular() if (documentFormularUservalue == ) alert(Bitte Namen eingeben) documentFormularUserfocus() return false if (documentFormularMailvalueindexOf() == -1) alert(Keine E-Mail-Adresse) return false var chkZ = 1for (i = 0 i lt documentFormularAltervaluelength ++i)if (documentFormularAltervaluecharAt(i) lt 0 ||

documentFormularAltervaluecharAt(i) gt 9) chkZ = -1 if (chkZ == -1) alert(Altersangabe keine Zahl)

documentFormularAlterfocus() return false ltscriptgt ltheadgt

ltbodygt ltform name=Formularldquo action=httpfphpmethod=post onsubmit=return checkeFormular()gt

Name ltinput type=text size=40 name=UsergtE-Mail ltinput type=text size=40 name=MailgtAlter ltinput type=text size=40 name=AltergtFormular ltinput type=submit value=Absendengt

ltinput type=reset value=Abbrechengt ltpregt ltformgt

Beispiele zur Arbeit mit Ereignissen und Objekten

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 26

Testen und Debuggen von JavaScriptDetails unter httpwikiselfhtmlorgwikiJavaScriptTutorials bull Testausgaben mit alert(ldquoInfo hellipldquo ) bull Abfangen von Fehlern mit try catch

try adddlert(Welcome guest) fehlerhafter Befehl catch(err)

documentgetElementById(demo)innerHTML = Error + errmessage

bull Konsolenausgaben (innerhalb Browserdebugger ndash browserabhaumlngig) Aufruf meist mit Ctrl + Shift + I )

Mit consolelog(a) auch mit texten und -Platzhaltern wie in C

Mit consolinfo(hellip) und consoleerror(hellip) mit spezieller Hervorhebung a = 2 consolelog(a)a = 3 consolelog(a=d a )a = 4 consoleinfo(a) a = 5 consoleerror(a= f a)

bull je nach Browser auch mit Setzen von Breakpoints Function-Call- Stackanzeige

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 27

Alle weiteren Details und Beispiele zu JavaScript Grundlagen

httpwikiselfhtmlorgwikiJavaScript

Groumlszligere Anwendungsbeispiele httpwikiselfhtmlorgwikiJavaScriptAnwendung_und_Praxis

Weitere Unterlagen unterhttpwwww3schoolscomjs

Beispiele und Details

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 28

kombiniert JavaScript HTML DHTML DOM und XML erzeugt stark interaktive Seiten und ermoumlglicht damit fluumlssigeres

Arbeiten keine manuelle Interaktion des Users mit dem Server sondern

eigenstaumlndige Kommunikation von Javascript mit dem Server Ajax-Kommunikation durch das XMLHttpRequest-Objekt mit

einem meist asynchronen XML-Datenaustausch XMLHttpRequest-Objekt ist verfuumlgbar ab Microsoft Internet

Explorer 50 Mozilla Firefox 10 Netscape 71 Apple Safari 12Opera Mobile Browser 80

Achtung leider noch unterschiedliche Objektreferenzen auf das XMLHttpRequest-Objekt

Ajax (Asynchronous JavaScripting and XML)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 29

Die wichtigsten Methoden von XMLHttpRequest Oumlffnen einer Verbindung zum Server

open( httpReqMeth url async )open( httpReqMeth url async usr pwd )

httpReqMeth - definiert http-Methode (GET POST PUT) url = URL des Dienstes async = true fuumlr asynchrone Kommunikation (Client wartet nicht auf Antwort sondern es wird Callback-Funktion spaumlter aktiviert)

Absenden eines Requestsend( postReq ) - postReq = null fuumlr GET-Anfragen oder Key-Value-Paare fuumlr POST-Anfragen (zB ldquoKey1=Value1ampKey2=2)

abort() - Bricht eine aktuell laufende Anfrage ab setRequestHeader( key value ) - fuumlgt dem HTTP-Header Werte zu

Methoden von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 30

onreadystatechange - verweist auf die Event-Handler-Callback-Methode welche bei Zustandsaumlnderungen des XMLHttpRequest-Objekts aufgerufen wird (siehe

readyState ndash aktueller Status des Request mit folgenden Werten 0 = uninitialized 1 = loading 2 = loaded3 = interactive 4 = complete

status - das Ergebnis des http-Request ( = http-Status ) zB 200 = OK 404 = Not Found

statusText - der HTTP-Status als Textmitteilung responseText - die Serverantwort als einfacher Text responseXML - die Serverantwort im XML-Format

Die wichtigsten Attribute von XMLHttpRequest

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 31

ltscript language=JavaScript type=textjavascriptgt var url = httplocalhostcheckiptxtjsp var req function starteAjax() try if( windowXMLHttpRequest )

req = new XMLHttpRequest() Version fuumlr Firefox amp Co else if( windowActiveXObject )

req = new ActiveXObject( MicrosoftXMLHTTP ) IE else alert( Ihr Webbrowser unterstuetzt leider kein Ajax ) reqopen( GET url true )reqonreadystatechange = meineCallbackFkt reqsend( null )

catch( e ) alert( Fehler + e ) function meineCallbackFkt()

if( 4 == reqreadyState ) if( 200 = reqstatus ) alert( Fehler + reqstatus + + reqstatusText )

else alert( reqresponseText ) ltscriptgt

Die Grundstruktur eines Ajax-Request

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 32

- Request analog zu vorheriger Seite und Anforderung XML-Dok if( reqoverrideMimeType ) reqoverrideMimeType( textxml )

- Neue Auswertung in der Callback-Funktion function meineCallbackFkt() if( 4 == reqreadyState ) if( 200 = reqstatus )

alert( Fehler + reqstatus + + reqstatusText ) else ergebnis = reqresponseXMLdocumentElement

Hole Werte aus dem XML-Responsevar zahlAusgabe = ergebnisgetElementsByTagName(zahl)[0]firstChilddatavar textAusgabe = ergebnisgetElementsByTagName(text)[0]firstChilddatavar ipAusgabe = ergebnisgetElementsByTagName(ip)[0]firstChilddata

Schreibe Werte in die HTML-Seite documentgetElementById(zahlAusgabe)value = zahlAusgabe

documentgetElementById(textAusgabe)value = textAusgabe documentgetElementById(ipAusgabe)innerHTML = ipAusgabe

Ajax-Request mit XML-Antwort

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 33

1 HTMLSeite mit Formular ltform name=formular action=gt

ltinput type=text id=eingabefeld onKeyUp=meinAjaxAufruf( thisvalue )gt ltbrgt ltdiv id=auswahlboxgtltdivgt ltformgt

2 Ajax - Request mit aktuellem Inhalt des eingabe-Feldesdocumentformulareingabefeldfocus()var url = autovervollstaendigungjspeingabe= + escape( eingabetext ) reqopen( GET url true )

3 Ajax ndash Response in Formular einbauen var text = reqresponseText if( text = ) auswahlarray = textsplit( )

for( var idx in auswahlarray ) auswahlinhalt += lta href=javascriptmeinMausklick( + idx + ) id= + idx auswahlinhalt += class=aw onmouseover=sel(+idx+)gt auswahlinhalt += auswahlarray[idx] + ltagt

documentgetElementById( auswahlbox )innerHTML = auswahlinhalt

Demo Ajax-Request fuumlr Auto-Vervollstaumlndigen

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 34

Vorteile im Gegensatz zu Flash oder aumlhnlichen Technologien wird kein

Browser-Plugin benoumltigt auch unabhaumlngig von Betriebssystem Schnelleres fluumlssigeres Arbeiten (kein unnoumltiges Laden von

statischen Daten bei erneuten Request -gt Einsparung vonBandbreite)

Nachteile JavaScript-Unterstuumltzung muss aktiviert sein Noch Probleme mit unterschiedlichen Browserversionen

(sollte sich durch W3C-Standardisierung legen)

Generelle Ajax- Kritik

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 35

Generell umfangreiche Tests erforderlich ggf Erleichterung durch entsprechende Frameworks (Fehlerhandlg) siehe Dojo-Toolkit - httpdojotoolkitorg oder auch JQuery (siehe VL)Probleme mit Browserversionen Durch Fallunterscheidungen auf Clientseite loumlsbar (ineffizient) -gt Server-seitige Browsererkennung und spezifische Javascript-CodesVerwendung der bdquoZuruumlckldquo-Schaltflaumlche Funktionalitaumlt der bdquoZuruumlckldquo- Schaltflaumlche kann nicht gewaumlhrleistet werden da

diese nicht uumlber Ajax-Aktionen informiert wird Loumlsung durch Fuumlllung von zusaumltzlichen Inline-Frame-Elementen oder speziellen

Ruumlckruf-Funktionen (bei Frameworks)Bandbreitenprobleme bei staumlndigem Polling Da nur Kommunikation von Client-gt Server-gtServer muss Client bei Verdacht auf

Serveraktual ggf- pollen -gt Netzlast Loumlsungen Serverresponse kuumlnstlich verzoumlgern bis zum Eintreten des Ereignisses

oder eines Timeoutacutes

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 36

Analog zu den vorherigen Problemen Lesezeichenspeicherung Barrierefreiheit Suchmaschinen erkennen die dyn Ajax-Inhalte nicht 100ig

(Google analysiert seit Mai 2016 zumindest offiziell AJAXJS-Requests)Loumlsungen

zusaumltzliche Metatags oder Uumlberschriften-Elemente fuumlr die Indizierung Zusaumltzliche (unsichtbare) Links werden auf der Webseite fuumlr die Suchroboter einer Suchmaschine gedacht sind zweite Webseite mit statischen Links wird entworfen Diese ist fuumlr eine

Suchmaschine voll zugaumlnglich (Achtung als Cloaking einstufbar) Neu Ajax-Interpreter in den Suchmaschinen selbst ( )

Gesamtfazit Ajax ist eine in Kombination mit aufsetzenden Frameworks eine sehr

nuumltzlich Technolgie zum Aufbau desktopaumlhnlicher Web-Apps

Weitere Ajax- Kritik (ggf technisch loumlsbar)

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos

Entwicklung webbasierter Anwendungen - Prof TWiedemann - HTW Dresden - Folie 37

Im Netz verfuumlgbare Demos und Details

httpwwwajax-netdeindexphpoption=com_wrapperampItemid=62

httpdewikipediaorgwikiAjax_28Programmierung29

Ajax- Demos