XML im Browser

Transcription

XML im Browser
Interne DOM Repräsentation im Browser
HTML DOM im Browser
■ Eine HTML Seite wird im Browser als DOM abgebildet
■
■
XHTML ist XML -> Standard Repräsentation
HTML DOM wird erstellt
<html>
<html>
<head>
<head>
<title>My
<title>My Title</title>
Title</title>
</head>
</head>
<body>
<body>
<a
<a href="">My
href="">My Link</h1>
Link</h1>
<h1>My
<h1>My Header<h1>
Header<h1>
</body>
</body>
</html>
</html>
■ HTML Dokument als DOM Baum im Browser
■ Zugriffsmechanismen auf die Elemente im HTML Dokument
■ Zugriff vom Browser aus mittels AJAX
http://www.w3schools.com/htmldom/default.asp
School of Engineering
© K. Rege, ZHAW
2 von 54
Zugriff zum HTML DOM
■ FireBug für Firefox (gratis)
■ DOM Inspector für IE (shareware)
Java Script
■ Via COM Schnittstelle (nur IE) von anderen Sprachen aus
■ In Java als Teil
■
■
■
URL u = new URL("http://www.oreilly.com");
JEditorPane jep = new JEditorPane(u);
jep.setEditable(false);
■ Via eingebettetes Java Script
■
document.body.bgColor="yellow"
School of Engineering
© K. Rege, ZHAW
3 von 54
School of Engineering
© K. Rege, ZHAW
4 von 54
Scripts auf dem Client
Geschichte
A client-side script is a program that may accompany an HTML document or be embedded
directly in it. The program executes on the client's machine when the document loads, or at
some other time such as when a link is activated. HTML's support for scripts is
independent of the scripting language (W3C: HTML 4.01)
■Von Netscape entwickelt
■
Erstmals 1995 in den Netscape Navigator 2.0
integriert
■Hiess ursprünglich LiveScript
Scripts may be triggered by events that affect the document, such as loading, unloading,
element focus, mouse movement, etc.
■ Scripts may be linked to form controls (e.g., buttons) to produce graphical user interface
■ECMA Standard für Internet-Scriptsprachen
■1997 ECMA-262 ist eine Teilmenge von
JavaScript 1.3
■1999 ECMA-262 Edition 3
angepasst für JavaScript 1.5
■Firefox 1.5
JavaScript 1.6
■Firefox 2:
JavaScript 1.7
■Internet Explorer
unterstützt JScript; in vielen
Teilen nahe an aber nicht
identisch mit ECMA Script
elements.
■HTML
Unterstützung für Client-Scripts zwar
unabhängig von der Scriptsprache
■Praktisch
im Web aber nur JavaScript einsetzbar
JavaScript Language Resources
http://www.mozilla.org/js/language/
Quelle: Kapitel "Scripts" der HTML Spezifikation (W3C)
http://www.w3.org/TR/html4/interact/scripts.html
School of Engineering
© K. Rege, ZHAW
5 von 54
Rolle von Client Scripting
School of Engineering
© K. Rege, ZHAW
6 von 54
Anwendung
■ Client-side Scripting fügt Webseiten eine dritte Komponente hinzu:
■ Überprüfung von Formulardaten
HTML/XHTML
→ Struktur und Inhalt
Stylesheets
→ Darstellung, Aussehen
Client Scripts
→ Verhalten auf dem Klient
■ Programme, die komplett im Browser ausgeführt werden
■ Dynamisches Anpassen des Seiteninhalts
■ Zusätzliche Bedienungselemente
■ Die verschiedenen Aspekte soweit als möglich trennen
■ Asynchrone Client-Server Kommunikation (AJAX)
■ Ein paar Überschneidungen aber vorhanden
■ Animationen
DHTML: Dynamic HTML
→ Kombination von HTML, CSS, JavaScript/DOM
■ Vorteile:
■
■
Scripte werden im Browser ausgeführt-> es wird kein Roundtrip bei fehlenden/fehlerhaften Eingaben
notwendig.
Die Seite reagiert "agiler" auf Benutzerinteraktionen
School of Engineering
© K. Rege, ZHAW
7 von 54
School of Engineering
© K. Rege, ZHAW
8 von 54
Mögliche Probleme
JavaScript und HTML-Datei
■ Inkompatibilitäten in den Implementationen
<script type="text/javascript">
<!-alert("Oh je, ein Meldungsfenster...");
//-->
</script>
■
Funktionen aus Script (Hilfs-) Bibliotheken verwenden z.B. Prototype, Scriptaculous
■ Sicherheitsmängel wegen fehlerhafter Implementierung
■
Regelmässiges Update erforderlich
Besser: JavaScript in separater Datei:
■ Verfügbarkeit von JavaScript sollte nicht vorausgesetzt werden
■
Seiten müss(t)en auch ohne JavaScript eingeschränkt "funktionieren";
JavaScript nur als optionale "Erweiterung" ansehen
■
Heute aber bereits viele Seiten die NUR noch MIT JavaScript funktionieren
■
<script type="text/javascript" src="quadrat.js">
School of Engineering
</script>
© K. Rege, ZHAW
9 von 54
School of Engineering
© K. Rege, ZHAW
noscript
User Scripts (neu)
■ Das noscript-Element erlaubt eine Alternative anzugeben, für den Fall, dass keine
Scripts ausgeführt werden
■ Scripts, die im Browser installiert werden
■ Der Inhalt des noscript-Elements wird ignoriert, falls der Browser JavaScript unterstützt
und es eingeschaltet ist
■ Mögliche Anwendung:
■ Diese Scripts modifizieren bestimmte oder alle Webseiten, die besucht werden
■
■
■ Andernfalls wird der Inhalt des noscript-Elements ausgewertet
10 von 54
■
Bessere Lesbarkeit oder Benutzbarkeit einer Seite
Korrigieren von Fehlern auf einer Seite
Einfügen von Daten aus anderen Quellen
■ Unterstützt in
■
■
■
School of Engineering
© K. Rege, ZHAW
11 von 54
Opera ab Version 8.0
Firefox mit Greasemonkey Erweiterung
Internet Explorer mit IE7Pro Erweiterung
School of Engineering
© K. Rege, ZHAW
12 von 54
Syntax
■ Angelehnt an die Syntax von Java
■
■
■
■
■
Operatoren wie in Java
Anweisungen mit ; abschliessen
Blöcke mit { ... }
Kommentare mit // oder /* ... */
if, for, while, do while, ...
■ Objektbasiert (mit Prototypen ≠ Klassen à la Java)
■ Keine statischen Typen
Zugriff auf HTML-Dokumente
var a = "hallo";
a = 25;
■ …. siehe andere Vorlesungen oder w3school
http://www.w3schools.com/js/default.asp
School of Engineering
© K. Rege, ZHAW
13 von 54
School of Engineering
© K. Rege, ZHAW
14 von 54
Zugriff auf HTML-Dokument Objekte
■ Zwei Varianten in JavaScript
■
■
node-Objekte (Standard DOM)
HTML-Elementobjekte
■ Voraussetzung in beiden Fällen: JavaScript 1.5
Standard DOM
School of Engineering
Standard DOM
© K. Rege, ZHAW
15 von 54
School of Engineering
© K. Rege, ZHAW
16 von 54
Standard DOM
Standard DOM Zugriff Beispiele
■ Allgemeinere, von HTML unabhängige Variante
XMLNode und XMLElement
■ Um Elemente eines HTML Dokuments auszuwählen, gibt es verschiedene Methoden
■ Jedes Element, jedes Attribut, ... stellt ein Objekt
dar
■ Auswahl des Elements mit der id
document.getElementById()
■ Auch für andere XML Sprachen geeignet
■ Beispiel
■ Auswahl der Elemente mit dem Wert des name-Attributs
Nur für Elemente mit name-Attribut; NICHT in IE unterstützt!!!!
bildobjekt = document.getElementById("logo"); // ein Knotenobjekt
document.getElementsByName()
bildobjekt.setAttribute("alt ","Unser Firmenlogo"); // Alternativtext ändern
■ Auswahl der Elemente von diesem Typ
Bsp.: document.getElementsByTagName("p")[0]
document.getElementsByTagName()
School of Engineering
© K. Rege, ZHAW
17 von 54
School of Engineering
© K. Rege, ZHAW
Suchmethoden des node-Objekts
Attribute des node-Objekts
■ Erlaubt den Zugriff auf einzelne Knoten der Baumstruktur eines XML/HTMLDokuments
attributes
Array der Attribute des Knotens (read only)
childNodes
Array der Kindknoten (read only)
firstChild
Erster Kindknoten (read only)
lastChild
Letzter Kindknoten (read only)
parentNode
Übergeordneter Knoten (read only)
nextSibling
Nachfolgender Knoten auf der gleichen Ebene
(read only)
previousSibling
Vorgänger Knoten auf der gleichen Ebene (read only)
■ Die Navigation in der Baumstruktur erfolgt ausgehend von einem Knoten, der über die
folgenden Methoden ausgewählt werden kann:
■
■
■
■
node.getElementById()
node.getElementsByName()
node.getElementsByTagName()
….
School of Engineering
© K. Rege, ZHAW
19 von 54
School of Engineering
© K. Rege, ZHAW
18 von 54
20 von 54
… Attribute des node-Objekts
Beispiel
data
Zeichendaten, falls Textknoten (read/write)
<h1 id="header">Knoten in der <i>Baumstruktur</i></h1>
nodeValue
Wert des Knotens (Attributwert, Textinhalt)
(read/write)
nodeName
Name des Knotens, bei Elementen Elementname
(read only)
<script type="text/javascript">
var elementknoten = document.getElementById("header");
var wertErsterKindknoten = elementknoten.firstChild.nodeValue;
document.write("Der Wert des ersten Kindknotens lautet: <b>"
+ wertErsterKindknoten + "<\/b>");
</script>
nodeType
Typ: 1=Elementknoten, 2=Attributknoten,
3=Textknoten, ... (read only)
School of Engineering
© K. Rege, ZHAW
21 von 54
School of Engineering
© K. Rege, ZHAW
Knoten erzeugen
Methoden des node-Objekts
■ Für verschiedene Methoden des node-Objekts muss zuvor ein neuer Knoten erzeugt
werden
appendChild()
Als letztes Kindelement einfügen
removeChild()
Wert Kindknoten entfernen
replaceChild()
Kindknoten ersetzen
■ Dazu gibt es drei Methoden des document-Objekts:
document.createElement()
HTML-Elementknoten erzeugen
hasChildNodes()
Test, ob Kindknoten vorhanden
document.createAttribute()
Attributknoten erzeugen
insertBefore()
Einfügen vor einem bestimmten Knoten
document.createTextNode()
Textknoten erzeugen
appendData()
Daten (Text, Attributwert) am Ende
hinzufügen
deleteData(),insertData(),
Daten löschen, einfügen, ersetzen
■ Diese Knoten können dann mit den Methoden des node-Objekts in die Baumstruktur
eingehängt werden
22 von 54
replaceData()
School of Engineering
© K. Rege, ZHAW
23 von 54
School of Engineering
© K. Rege, ZHAW
24 von 54
… Methoden des node-Objekts
getAttribute()
Attributwert ermitteln
removeAttribute()
Attributwert löschen
setAttribute()
Attributwert setzen
getAttributeNode()
Liefert Attributknoten
removeAttributeNode()
Attributknoten löschen
setAttributeNode()
Attributknoten setzen
getElementsByTagName()
Findet Elemente nach Tag Namen
cloneNode()
Knoten kopieren
School of Engineering
© K. Rege, ZHAW
Beispiel
<script type="text/javascript">
function setText () {
document.getElementById("Text").firstChild.nodeValue
= document.getElementById("Eingabe").value;
}
</script>
<form name="Formular" action="">Text:<br />
<textarea id="Eingabe" rows="10" cols="50" onkeyup="setText()">
</textarea>
</form>
<div id="Text" style="font-size:1.4em; background-color:#FFFFCC; padding:10px;
border:solid 1px red"> &nbsp;
</div>
25 von 54
School of Engineering
© K. Rege, ZHAW
26 von 54
HTML Elementobjekte
■ HTML Variante des Document Object Models
(DOM)
■ Jedes Element im Baum stellt ein spezifisches Objekt dar
■ Je nach Element bestimmte Attribute oder
Methoden definiert
■ Beispiel
HTML Elementobjekte
bildobjekt = document.getElementById("logo"); // ein img Objekt
bildobjekt.alt = "Unser Firmenlogo"; // Alternativtext ändern
Hinweis: Browser-Unterstützung unterschiedlich, Tests mit verschiedenen Browser
notwendig
School of Engineering
© K. Rege, ZHAW
27 von 54
School of Engineering
© K. Rege, ZHAW
28 von 54
Auswahl von HTML-Elementen & node-Objekten
HTML Elementobjekte
■ Eine Reihe von Elementen sind ausserdem über vordefinierte Arrays auswählbar
■ Universaleigenschaften:
■
■
■
■
■
■
document.forms
document.images
document.links
document.anchors
document.applets
window.frames
className
dir
id
lang
title
Achtung: className, nicht class
■ Diese Attribute werden von praktisch allen HTML Elementobjekten unterstützt
■ Diese Variante stammt bereits aus den ersten JavaScript Versionen und wird daher von
allen Browsern gut unterstützt
MeinFormular =document.forms["Anmeldung"];
MeinFormular.elements["Eingabe"].value = 0;
School of Engineering
© K. Rege, ZHAW
■ Sie können durch Scripts gelesen und geändert werden
■ Zusätzlich sind auch die Event Handler als Attribute der Elemente zugänglich
Element
Elementmit
mitIdIdoder
oderName*
Name*
(*deprecated)
(*deprecated)
29 von 54
School of Engineering
© K. Rege, ZHAW
HTML Elementobjekt a
HTML Elementobjekt form
■ Zugriff auf die Attribute des a-Elements
■ Zugriff auf die Attribute des form-Elements
■
href, name, rel, ...
■
■ Methoden
■
action, name, method, ...
■ Zugriff auf die Elemente des Formulars
focus(), blur()
■
■ Beispiel
■
30 von 54
elements
■ Methoden
document.getElementById("zhaw").href = "http://www.zhwin.ch";
■
reset(), submit()
■ Beispiel
■
School of Engineering
© K. Rege, ZHAW
31 von 54
document.getElementsByName('loginform')[0].submit();
School of Engineering
© K. Rege, ZHAW
32 von 54
HTML Elementobjekt img
Weitere Elementobjekte
■ Zugriff auf die Attribute des img-Elements
■ Formularelemente wie textarea und input haben Attribute value, size, disabled, ... und
Methoden focus(), select(), ...
■
alt, height, name, src, width, ...
■ Möglichkeit, die Eigenschaften von Bildern zu ändern, oder Bilder dynamisch
auszutauschen
■ Tabellen (table) haben haben Attribute rows, tBodies, tFoot, tHead, ... und Methoden
createCaption(), insertRow, deleteRow(), ...
■ Tabellenzeilen (tr) haben Methoden wie deleteCell(), insertCell()
■ Eine komplette Zusammenstellung der Elementobjekte und ihrer Attribute und
Methoden ist im SelfHTML zu finden
http://de.selfhtml.org/javascript/objekte/htmlelemente.htm
School of Engineering
© K. Rege, ZHAW
33 von 54
School of Engineering
JavaScript und HTML DOM Anwendungen
School of Engineering
© K. Rege, ZHAW
© K. Rege, ZHAW
34 von 54
XSLT Transformation im Browser
35 von 54
School of Engineering
© K. Rege, ZHAW
36 von 54
XSLT Transformation im Browser (mit JavaScript)
■ XSLT Stylesheet Direktiven im XML/HTML Header werden direkt ausgeführt
<? xml-stylesheet type= "text/xsl" href="adresse.xsl" ?>
■ Man kann die Transformation auch via JavaScript anstossen und steuern
////Load
LoadXML
XML
var
varoXmlDom
oXmlDom==new
newActiveXObject("Microsoft.XMLDOM")
ActiveXObject("Microsoft.XMLDOM")
oXmlDom.async = false;
oXmlDom.async = false;
oXmlDom.load("adresse.xml")
oXmlDom.load("adresse.xml")
////Load
LoadXML
XML
var
varoXmlDom
oXmlDom==document.implementation.createDocument("",
document.implementation.createDocument("","","",null);
null);
oXmlDom.async
oXmlDom.async==false;
false;
oXmlDom.load("adresse.xml");
oXmlDom.load("adresse.xml");
////Load
LoadXSL
XSL
var
varoXslDom=
oXslDom=new
newActiveXObject("Microsoft.XMLDOM")
ActiveXObject("Microsoft.XMLDOM")
oXslDom.async
oXslDom.async==false;
false;
oXslDom.load("adresse.xsl")
oXslDom.load("adresse.xsl")
////Load
LoadXSL
XSL
var
varoXslDom
oXslDom==document.implementation.createDocument("",
document.implementation.createDocument("","","",null);
null);
oXslDom.async
oXslDom.async==false;
false;
oXslDom.load("adresse.xsl");
oXslDom.load("adresse.xsl");
////Transform
Transform
var
varresXmlDom
resXmlDom==oXmlDom.transformNode(oXslDom);
oXmlDom.transformNode(oXslDom);
document.write(resXmlDom);
document.write(resXmlDom);
////Transform
Transform
var
varoProcessor
oProcessor==new
newXSLTProcessor();
XSLTProcessor();
oProcessor.importStylesheet(oXslDom);
oProcessor.importStylesheet(oXslDom);
var
varresXmlDom
resXmlDom==oProcessor.transformToDocument(oXmlDom);
oProcessor.transformToDocument(oXmlDom);
document.write(new
document.write(newXMLSerializer().serializeToString(resXmlDom));
XMLSerializer().serializeToString(resXmlDom));
AJAX
DomAdapter http://www.alexatnet.com/node/62
http://www.admin-wissen.de/tutorials/eigene-tutorials/webentwicklung/ajax-tutorial/
School of Engineering
© K. Rege, ZHAW
37 von 54
■ Ajax ist die Abkürzung für:
■
■
■
■
■
■
■
■
■
■
in XML kodiert
als JSON kodiert
reiner Text
■
■
■
School of Engineering
© K. Rege, ZHAW
HTML Seite wird geladen
Daten werden in Formular eingegeben
Daten werden zum Server geschickt
nächste HTML Seite wird geladen, usw.
■ Ajax Modell
■ Die Nachrichten können sein
■
38 von 54
■ Traditionelle Web Anwendung
Asyncronous
JavaScript
and
XML
■ Kombination aus älteren Technologien
■
© K. Rege, ZHAW
Eigenschaften
Einführung
■
School of Engineering
39 von 54
HTML Seite wird geladen
Daten werden in Formular eingegeben
schon während/nach der Eingabe werden die Daten
via Java Script zum Server geschickt und validiert
Vorteile
■ verbesserte Benutzerfreundlichkeit
■ in Summe weniger Datentransfer
Nachteile
■ verschiedene Technologien beherrschen
■ Unterschiede der JavaScript Impl. im Browser
School of Engineering
© K. Rege, ZHAW
40 von 54
Grundlegender Ablauf
Definieren des Request Objekts
■ JavaScript
var request
■
■
■
Definiere ein Objekt um HTTP Requests zu senden
Initialisiere den Request
■ Hole request Objekt
■ Bestimme eine request Handler Funktion
■ als onreadystatechange attribute des requests
■ löse GET oder POST Request aus
■ sende die Daten
Behandle Antwort
■ warte bis readyState = 4 (und HTTP Status = 200)
■ extrahiere den RückgabeText in responseText oder responseXML
■ verarbeite das Resultat
function getRequestObject() {
if (window.XMLHttpRequest) {
// If IE7, Mozilla, Safari, and so on: Use native object.
if (window.ActiveXObject) {
■
Version
VersionofofInternet
Internet
Explorer
Explorer5.5
5.5ororlater
later
// ...otherwise, use the ActiveX control for IE5.x and IE6.
return (new ActiveXObject('MSXML2.XMLHTTP.3.0'));
}
■ HTML
■
Version
Versionfor
forNetscape,
Netscape,
Firefox,
Firefox,Opera,
Opera,Safari
Safari
return ( new XMLHttpRequest());
}else {
http://msdn.microsoft.com/en-us/library/ms537505%28VS.85%29.aspx
}
lade JavaScript
übergeben Kontrolle um den Aufruf auszuführen
else {
return (null);
}
fail otherwise
fail otherwise
}
School of Engineering
© K. Rege, ZHAW
41 von 54
Request auslösen
School of Engineering
© K. Rege, ZHAW
42 von 54
Antwort bearbeiten
Response
ResponseHandler
Handler
Funktion
Funktion
Antwort
Antwortdes
desServers
Servers
function sendRequest() {
request = getRequestObject();
function handleResponse() {
request.onreadystatechange = handleResponse;
if (request.readyState == 4) {
request.open("GET","http://localhost:8080/showtime.html",true);
request.send(null);
}
}
POST Data; null für
POST Data; null für
GET
GET
School of Engineering
Text der Antwort
Text der Antwort
alert(request.responseText);
URL
URLfür
fürAufruf
Aufruf
}
Warte
Wartenicht
nichtauf
aufAntwort;
Antwort;
sende
sendeasynchron
asynchron
© K. Rege, ZHAW
Pup up Dialog Box
Pup up Dialog Box
43 von 54
School of Engineering
© K. Rege, ZHAW
44 von 54
Hello World als AJAX
Erzeugen
Erzeugendes
desAjax
Ajax
Request
RequestObjekts
Objekts
function doIt(){
var req = null;
try{
req = new XMLHttpRequest();
}
catch (ms){
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (nonms){
try{
req = new XMLHttpRequest();
}
catch (failed){
req = null;
}
HTML
}
HTMLInhalt
Inhalt
}
<html>
<head .....>
<body>
<div id="eins" style="width: 80%; height: 80%;">
<input type="button" onclick="doIt();" value="Mach was!"/>
</div>
</body>
</html>
School of Engineering
Servlet Code
Parameter
Parameterfür
fürAuslösen
Auslösen
des
desasyncronen
asyncronenRequests
Requests
req.open("GET", 'http://localhost/ajax-tutorial/eins/test.txt', true);
package coreservlets;
//Beim abschliessen des request wird diese Funktion ausgeführt
req.onreadystatechange = function(){
switch(req.readyState) {
case 4:
if(req.status!=200) {
Definition
Definitionder
derCallback
Callback
alert("Fehler:"+req.status);
Funktion
Funktion
}else{
import ...
alert(req.responseText);
document.getElementById('eins').innerHTML = '<strong>'+
req.responseText
+'</strong>';
}
break;
default: return false; break;
}
};
Header
Headerund
undDaten
Daten
senden
senden
req.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
req.send(null);
}
}
© K. Rege, ZHAW
45 von 54
Bespiel: Übersetzungsservice mit XML Antwort
■ Der Webserver lädt eine WSDL Datei die den Webservice beschreibt.
■ Auf dem Webserver abfrage eines Webservice via Soap.
■ zurücksenden der Antwort als XML
Verarbeitung
Verarbeitungder
der
Antwort
Antwort
■ parsen und schreiben der Ergebnisse.
Aufruf
Aufruf
req.open("GET", url, true);
//Beim abschliessen des request wird diese Funktion
ausgeführt
req.onreadystatechange = handleTranslation;
req.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
req.send(null);
School of Engineering
function handleTranslation(){
switch(req.readyState) {
case 4:
if(req.status!=200) {
alert("Fehler:"+req.status);
}else{
//antwort des servers
xml = req.responseXML;
german_resp = xml.getElementsByTagName("german")[0];
//schreiben des ergebnisses
german_field.value = german_resp.firstChild.nodeValue;
}
break;
default: return false; break;
}
}
© K. Rege, ZHAW
School of Engineering
© K. Rege, ZHAW
46 von 54
Daten als XML
■ Anfrage via Ajax.
//anfrage erstellen (GET, url ist localhost,
//request ist asynchron
var url = 'http://localhost/ajaxtutorial/zwei/ajax.php?translate='+
document.getElementById('myword').value;
public class ShowTime extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServlerResponse resp) throws ServletException,
IOExeption {
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Date gurrentTime = new Date();
String message = String.format("It is now %tr on %tD.", currentTime,
currentTime);
out.print(message);
47 von 54
<html>
<head .....>
HTML
HTMLInhalt
Inhalt
<body>
<div id="eins" style="width: 80%; height: 80%; border: dashed 1px;">
englisch: <input type="text" id="myword" onchange="handleTranslation();" /><br />
deutsch: <input type="text" id="german" /><br />
</div>
</body>
</html>
XML
XMLMeldung
Meldung
<translation>
<english>car</english>
<german> Auto </german>
</translation>
<?php
header("Content-Type: text/xml");
$english = mysql_escape_string($_REQUEST['translate']);
$trans = new SoapClient("http://www.xmethods.net/sd/2001/BabelFishService?wsdl");
try{
$german = $trans->BabelFish("en_de",$english);
}
catch(SoapFault $e){
$english = "not found";
}
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
?>
<translation>
<english><?php echo $english; ?></english>
<german> <?php echo $german; ?></german>
</translation>
School of Engineering
© K. Rege, ZHAW
PHP
PHPSOAP
SOAPCall
Call
- -läuft
läuftz.Z.
z.Z.leider
leider
nicht
nicht
48 von 54
JSON
Beispiel Übersetzungsservice mit JSON Antwort
■ Die Abkürzung JSON steht für JavaScript Object Notation
■
<?php
require_once("json.php");
function handleTranslation(){
switch(req.readyState) {
case 4:
if(req.status!=200) {
alert("Fehler:"+req.status);
}else{
z.B. in PHP gibt es ein PEAR Paket dafür http://mike.teczno.com/JSON/doc/
■ in JavaScript mit eval() wieder deserialisieren.
■ in JavaScript mit toJSONString () serialisieren (http://www.json.org/json2.js ).
$english = mysql_escape_string($_REQUEST['translate']);
$trans = new SoapClient("http://www.xmethods.net/sd/2001/".
"BabelFishService.wsdl");
//antwort des servers
var translation = eval('(' + req.responseText + ')');
■ Vorteil: kompakter und in JavaScript effizient zu verarbeiten
//schreiben des ergebnisses
german_field.value = translation.german;
}
break;
{"english":"car","german":"Auto "}
default: return false; break;
■ Weitere Informationen zu JSON sind unter der Website www.json.org oder im Wikipedia
zu finden http://de.wikipedia.org/wiki/JSON
School of Engineering
PHP
PHPSOAP
SOAPCall
Call
Verarbeitung
Verarbeitungder
der
Antwort
Antwort
■ Datenstrukturen in einer Programmiersprache, die eine JSON Bibliothek anbietet
serialisieren
© K. Rege, ZHAW
49 von 54
}
try{
$german = $trans->BabelFish("en_de",$english);
}
catch(SoapFault $e){
$english = "not found";
}
$result = array("english" => $english,
"german" => $german,
$myjson = new Services_JSON();
print(trim($myjson->encode($result)));
?>
}
School of Engineering
© K. Rege, ZHAW
50 von 54
Java Script Ajax Frameworks
■ Prototype http://www.prototypejs.org/
■ DOM Elemente manipulieren
■ Observer
new Event.observe(
'myword', 'click',
function(){ alert('hello'); },
false
);
getElementById
function init(){
getElementById
$('loading').hide();
new Event.observe(
'myword',
'blur',
function(event){
$('loading').show();
new Ajax.Request('ajax.php',
{
method:'get',
parameters: {translate: $('myword').value},
onSuccess: function(nom, json){
//nom ist der ungeparste response text
getElementById
getElementById
//json ist das object (json)
$('german').value = json.german;
$('loading').hide();
},
onFailure: function(){ alert('Fehler bei Ajax Request') }
});
AJAX Server
},
false
);
}
School of Engineering
© K. Rege, ZHAW
51 von 54
School of Engineering
© K. Rege, ZHAW
52 von 54
JSON in Java
Zusammenfassung
■ Verschiedene Projekte, z.B. FLEXJSON http://flexjson.sourceforge.net/
■ Eine HTML Seite im Browser ist als HTML DOM Baum via JavaScript zugreifbar
■ Flexjson als leichtgewichtige Bibliothek für die JSON Serialisierung
■ Es kann lesend und schreibend auf den HTML DOM Baum zugegriffen werden
■ ab 1.5 auch Unterstützung von Annotationen, z.B. @JSON(include=false)
■ Das asynchrone Nachladen von Daten und einbinden in den DOM Baum wird als AJAX
bezeichnet
School of Engineering
© K. Rege, ZHAW
53 von 54
School of Engineering
© K. Rege, ZHAW
54 von 54