Diapositiva 1 - Dipartimento di Scienze Ambientali, Informatica e

Transcript

Diapositiva 1 - Dipartimento di Scienze Ambientali, Informatica e
Basi di Dati
Jvascript, AJAX
Luca Cosmo
[email protected]
Dipartimento di Scienze Ambientali, Informatica e Statistica
Università Ca’ Foscari di Venezia, Italia
JavaScript
•
HTML: pagine statiche! L’unica azione possibile è quella di
richiedere un’altra pagina.
•
Per sviluppare della pagine dinamiche/interattive è necessario
poterne programmare il comportamento.
Jav aScript
PHP Page
Javascript:
•
Linguaggio di scripting.
•
Può essere incluso nelle pagine HTML inserendolo tra i tag:
<script type="text/javascript"> ... </script>
•
Il WebBrowser al caricamento della pagina esegue il codice e
integra il risutlato dinamico dello script con il contenuto statico
della pagina HTML.
JavaScript
Dynamic HTML (DHTML): Integrazione delle tecnologie HTML,
CSS, e linguaggio di scripting (JavaScript) per rendere le pagine
HTML interattive e dinamiche.
Utilizzi:
•
Interazione locale con l’utente (bottoni, elementi cliccabili…)
•
Validazione di Form
•
Animazioni (fade-in, rollovers, …)
•
AJAX - Asynchronous JavaScript and XML: permette di caricare parte
del contenuto della pagina dinamicamente.
•
…
Limitazioni:
•
Il codice è in chiaro, può essere facilmente modificato
•
Per problemi di sicurezza l’accesso alle risorse locali è limitato
(e.g. no accesso all’HD)
•
…
JavaScript - Storia
•
Sviluppato originariamente da Netscape nel 1995 co il nome di
Mocha -> LiveScript -> JavaScript
•
Microsof sviluppa la propria versione di JavaScript, Jscipt, nel
1996.
•
Processo di standardizzazione affidato a ECMA (European
Computer Manufacturers Association ). Nel 1998 viene
rilasciata la prima versione dello standard ECMA-262
(EcmaScript).
•
Tra i diversi browser (e versioni) ci sono differenze di
implementazioni e comportamento.
JavaScript – Caratteristiche
• JavaScript != Java
– Deriva da C
– Debolmente tipizzato
– Debolmente orientato agli oggetti
• Linguaggio interpretato (non viene compilato)
• Trasferito ed eseguito «client side»
• Usato come linguaggio di scripting:
– viene eseguito dentro un altro ambiente (WebBrowser, PDF, …)
– Interagisce con l’ambiente ospitante tramite alcuni API
(e.g. accesso agli elementi della pagina web)
JavaScript e i WebBrowser
•
Il codice HTML ricevuto viene trasformato nella corrispondente
oggetto DOM (Document Object Model).
•
DOM: rappresentazione della struttura della pagina come un
albero di oggetti, ognuno con i propri attributi e metodi.
•
Il WebBrowser mette a disposizione le API per interagire con il
DOM del documento.
Esempio di albero DOM
DOM
Jav aScript
JavaScript - Esempio
•
Il WebBrowser mette a disposzione dello script alcuni metodi e
alcuni oggetti di default con cui interagire.
<html>
<head>
…
</head>
<body>
Hello
<script type="text/javascript">
//Prima di modificare il contenuto apparirà un popup di avviso
alert("Sto per modificare il contenuto!");
document.write(“<strong>World!</strong>");
</script>
</body>
</html>
Visualizza nel browser
•
L’oggetto document rappresenta il body della pagina HTML.
•
La funzione alert fa apparire un popup di avviso
JavaScript – Librerie
Potrebbe essere utile definire un set di funzioni (libreria) usate in
più pagine in un file separato.
Possiamo importare dei file con codice JavaScript:
<html>
<head>
…
<script type="text/javascript" src="scripts/myLibrary.js"></script>
</head>
<body>
<script type="text/javascript">myfunction("mondo!");</script>
</body>
</html>
myScript.js
function myfunction(testo)
{
alert("Ciao "+testo);
}
Visualizza nel browser
ATTENZIONE: all’interno del file .js non va usato il tag <SCRIPT>
•
Esistono diverse librerie per JavaScript (e.g. jQuery)
JavaScript – Tipi e variabili
Solo tre tipi "primitivi":
• Stringhe: "foo" 'bar'
"I said 'hi'" ""
• Numeri: 12
3.14159
• Booleani: true false
<html>
<head>
…
</head>
<body>
<script type="text/javascript">
var n = 27;
x = 12.3;
s = "Numero: ";
document.write(s+12.3);
document.write("<br> Esadecimale:
"+n.toString(16));
s = false;
document.write("<br>Boolean: "+s);
var dieci = "10";
document.write("<br>Somma: "+(x-dieci));
</script>
</body>
</html>
Visualizza nel browser
o Per dichiarare una variabiile si
scrive var nomevariabile.
o Non è necessario dichiarare
le variabili (globali).
o Le variabili non hanno tipo.
o I tipi primitivi sono convertiti
all’occorrenza in oggetti.
o Se ritenuto necessario viene
effettuata una conversione
automatica (eg. stringa <->
numero)
JavaScript – Array
•
•
In java gli array sono dinamici
Gli array sono un tipo particolare di oggetto (hanno dei metodi
e attributi), per esempio:
–
–
•
•
myarray.length è una proprietà che contiene la lunghezza dell’array
myarray.reverse() è un metodo che inverte l’ordine degli elementi
Gli elementi non devono essere necessariamente omogenei
Un elemento di un array si accede con l’operatore []
<script type="text/javascript">
array1 = new Array(5);
array2 = new Array(); array2[3] = 6;
array3 = [0,5,'ciao',document]; array3.reverse();
for(i=0; i<array1.length; i++) document.write(array1[i]," - ");
//<br>
for(i=0; i<array2.length; i++) document.write(array2[i]," - ");
//<br>
for(i=0; i<array3.length; i++) document.write(array3[i]+1," - "); //<br>
</script>
Output:
undefined - undefined - undefined - undefined - undefined undefined - undefined - undefined - 6 [object HTMLDocument]1 - ciao1 - 6 - 1 -
JavaScript – Operatori e controllo del flusso
Operatori e istruzioni di controllo e condizionali sono quelle
standard di c++/Java:
•Operatori sui numeri: +, -, *, /, ++, --, +=, …
•Concatenazione stringhe: +
•Comparazione: ==, !=, <, >, <=, >=, ===, !== (valore e tipo)
•Logici: &&, ||, !
• Condizionali e cicli:
<script type="text/javascript">
– if(condition) {…}
var i=0;
document.write("<table>");
else {…}
while(i++ < 10)
– cond?valtrue:valfalse
{
document.write("<tr>");
– while(condition){…}
for(var j=1; j<=10; j++)
if(i!=1 && j!=1)
– do {…} while (condition)
document.write("<td class='",
– for(i=0; i<n; i++) {…}
i==j?"red":"","'>",i*j,"</td>");
else
document.write("<td class='bold'>",i*j,"</td>");
document.write("</tr>");
}
Visualizza nel
document.write("</table>");
</script>
browser
JavaScript – Funzioni
Le funzioni in JavaScipt:
• non hanno un tipo di ritorno
• i parametri in ingresso non hanno tipo
• gli argomenti sono passati o per valore (se primitivi), o per
riferimento (se oggetti).
function mySumFunction(a,b)
{
return a + b;
}
function myVoidFunction(myArray)
{
myArray.push("3")
}
a = 2; b = 3;
alert(a+"+"+b+"="+mySumFunction(a,b));
alert(a+"+"+b+"="+mySumFunction(a,"3"));
myArray = [];
alert(myVoidFunction(myArray));
Visualizza nel browser
• Il tipo di ritorno dipende
dinamicamente dai parametri
in ingresso
• Se l’uscita da una funzione
non deriva un’istruzione
return statement» il valore
ritornato è undefined
2+3=5
2+3=23
undefined
JavaScript – Funzioni e Scope
•
•
Le variabili dichiarate all’interno di una funziona (con var)
sono locali.
Le variabili dichiarate fuori da una funzione o non dichiarate
sono globali.
function test1(val)
{
x = 10 + val;
return x;
}
Visualizza nel browser
function test2(val)
{
var x = 10 + val;
return x;
}
var x = 20;
y = test1(x);
document.write(x + " + " + 10 + " = " + y + "<br>");
var x = 20;
y = test2(x);
document.write(x + " + " + 10 + " = " + y);
30 + 10 = 30
20 + 10 = 30
JavaScript – Oggetti
•
•
Gli oggetti in JavaScript sono un tipo speciale di dato che
possiede attributi e metodi.
Per creare un nuovo oggetto si usa la keyword new:
–
–
–
oggi = new Date();
ieri = new Date(“April 22, 2013“);
elementi = new Array();
• Possiamo accedere agli attributi
–
elementi.length
• E ai metodi:
–
–
•
oggi.getDate();
ieri.setMonth(1);
Anche i tipi «primitivi» possiedono attributi e metodi:
–
–
(9999).toPrecision(2);
"ciao".length
•
In realtà gli oggetti in JavaScript sono molto più complicati…
Ci limiteremo ad usare Classi e Oggetti messi a disposizione
nativamente (eg l’oggetto document, le classi Array, Date,
Math, …).
•
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
Visualizza nel browser
JavaScript – Navigare il Dom
•
È possibile navigare e selezionare gli elementi del DOM come
fosse un albero
<body>
<div id="el1"><img src="noimg.png" alt="Nessuna Immagine"></div>
<div id="el2">Ciao sono l'el2</div><br>
<script type="text/javascript">
function exploreDOM(node)
{
if(node.tagName)
{
if(node.tagName=='UL') return;
document.write("<li>", node.tagName, " ");
for(i=0; i< node.attributes.length; i++)
document.write(node.attributes[i]['name'], "=>" ,
document.write("<ul>");
for(child in node.childNodes)
exploreDOM(node.childNodes[child]);
document.write("</ul></li>");
node.attributes[i]['value'], ", ");
}
}
document.write("<ul>");
exploreDOM(document.getElementsByTagName("body")[0]);
document.write("</ul>");
</script>
</body>
•BODYDIV id=>el1,
Visualizza nel browser
Output
•
IMG src=>noimg.png, alt=>Nessuna Immagine,
•DIV id=>el2,
•BR
•SCRIPT type=>text/javascript,
JavaScript – Selezionare e modificare
•
•
•
È possibile selezionare alcuni particolari elementi all’interno del
file HTML (o meglio alcuni oggetti del suo DOM)
È possibile modificare il DOM inserendo, eliminando o
modificando i suoi nodi.
Per modificare il codice HTML contenuto all’interno di un
elemento possiamo accedere alla proprietà innerHTML
<body>
<div id="el1"></div>
<div id="el2"></div>
<script type="text/javascript">
divs = document.getElementsByTagName("div");
for(var el in divs)
divs[el].innerHTML = "CIAO!";
var divelement =
document.getElementById("el1");
divelement.innerHTML = "Sono un " +
divelement.tagName + " e il mio id è " +
divelement.attributes['id']['value'];
divelement.innerHTML +=
"<input type='button' value='B1'>";
var btn=document.createElement("BUTTON");
var t=document.createTextNode("B2");
btn.appendChild(t);
divelement.appendChild(btn);
</script>
</body>
o getElementById(id) è un
medoto di document che
restituisce l’elemento del DOM a cui
è associato l’id passato
o getElementsByTagName(tag)
di document restituisce una lista
con tuttti gli elmenti del DOM aventi
il particolare tag.
Visualizza nel browser
JavaScript – Eventi
•
•
•
In JavaScript è possibile associare a degli eventi l’esecuzione
di alcune funzioni.
Questi eventi sono predefiniti e vengono «chiamati» dal web
browser.
Generalmente sono associati all’interazione dell’utente con gli
elementi della pagina:
–
–
–
–
onclick: viene eseguito quando un elemento viene cliccato
onmouseover, onmouseout
onchange: viene eseguito quando il contenuto di un elemento cambia (e.g.
input)
onload: viene eseguito alla fine del caricamento di una pagina
<head>
. . .
<script type="text/javascript">
function initialize()
{
alert("Pagina caricata");
document.getElementsByTagName("body")[0].innerHTML = "LOADED";
}
</script>
</head>
<body onLoad="initialize()">
Loading...
</body>
</html>
Visualizza nel browser
JavaScript – Eventi
•
•
La funzione associata ad un evento si può specificare nel
codice come attributo degli elementi HTML.
é possibile associare una funzione ad un evento come attributo
nel DOM dell’elemento.
<script type="text/javascript">
Visualizza
function duplicate()
{
img = document.createElement('img');
img.src = "smile.jpg";
img.onmouseover = duplicate;
document.getElementsByTagName('body')[0].appendChild(img);
}
</script>
</head>
<body onLoad="">
<input type="button" value="ClickMe please!">
onclick="alert('Yesss'); this.value='Again Please!'" <br>
<img src="smile.jpg" onmouseover="duplicate()">
</body>
•
nel browser
ATTENZIONE: all’interno di una funzione la variabile this fa
riferimento all’oggetto chiamante. Nel caso degli eventi HTML
è l’elemento che ha generato l’evento.
JavaScript – Timing
•
window.setInterval permette di richiamare delle funzioni a
determinati intervalli:
•
•
h = window.setInterval(myfunction,milliseconds);
window.clearInterval(h) fa terminare il richiamo automatico.
window.setTimeout permette, in modo analogo, di pianificare
l’esecuzione di una funzione tra un certo periodo di tempo (una
volta sola).
<head>
...
<script type="text/javascript">
var i=0;
function initialize() {
window.setInterval(conta,100);
window.setTimeout("window.location.reload()",2000);
}
function conta() { document.getElementById('conta').innerHTML+=i+++'<br>'; }
</script>
</head>
<body onLoad="initialize()">
<div id="conta"></div>
</body>
Visualizza nel
•
•
browser
window.location.reload() ordina al browser di ricaricare la pagina corrente
È possibile inserire direttamente dei comandi JavaScript come stringa invece di
usare una funzione come delegate.
JavaScript – AJAX
Modello classico:
Ogni volta che l’utente ha bisogno di nuovi dati:
1. le informazioni relative alla richiesta dell’utente vengono
mandate al server tramite una richiesta HTML (e.g. form per la
ricerca)
2. Il server elabora la richiesta e invia una nuova pagina HTML
contenente le informazioni richieste.
JavaScript – AJAX
Asynchronous JavaScript and XML
• Tecnica di sviluppo di pagine web
• Prevede lo scambio di dati tra pagina web dinamica e web
server in «background».
• I dati acquisiti in background vengono visualizzati nella pagina
dinamicamente, attraverso la modifica del DOM.
VANTAGGI:
+ Minor utilizzo rete ( vengono scambiati solo i dati )
+ Interazione più naturale, simile alle applicazioni classiche
JavaScript – XMLHttpRequest
La comunicazione asincrona con il Web Server avviene mediante
l’utilizzo dell’oggetto XMLHttpRequest.
<script type="text/javascript">
function loadXMLDoc()
{
var xmlhttp;
// code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest)
xmlhttp=new XMLHttpRequest();
else // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
document.write(xmlhttp.responseText);
}
xmlhttp.open("GET","hello.txt",true);
xmlhttp.send();
}
</script>
Visualizza nel browser
ATTENZIONE: per motivi di sicurezza il browser potrebbe impedire di effettuare una
richiesta al di fuori del dominio corrente
JavaScript – XML
L’utilizzo classico di AJAX prevede lo scambio di dati in formato XML
L’attributo responseXML dell’oggetto XMLHttpRequest contiene il
DOM dell’XML restituito dal server (null se l’XML non è valido)
processXMLDOM(xmlhttp.responseXML.documentElement)
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<user>
<name>Luca</name>
<surname>Cosmo</surname>
<email>[email protected]</email>
</user>
<user>
<name>Renzo</name>
<surname>Orsini</surname>
<email>[email protected]</email>
</user>
</root>
function processXMLDOM(xmlDoc)
{
var users = xmlDoc.getElementsByTagName("user");
for(var i=0; i<users.length; i++)
{
var user = users[i];
var row = document.createElement("tr");
row.innerHTML =
"<td>"+user.getElementsByTagName("name")[0].firstChild.nodeValue+
"</td><td>"+user.getElementsByTagName("surname")[0].firstChild.nodeValue+
"</td><td>"+user.getElementsByTagName("email")[0].firstChild.nodeValue+"</td>";
document.getElementById("users").appendChild(row);
}}
<table id="users">
<tr><th>Nome</th><th>Cognome</th><th>Email</th></tr>
</table>
Visualizza nel browser
JavaScript – JSON
Mediante un XMLHttpRequest posso trasferire file testuali di
qualsiasi formato (testo semplice, HTML, XML, ….)
JavaScript Object Notation
• I dati sono strutturati nello stesso modo in cui si creano gli
oggetti «anonimi» in JavaScript.
processJSON(xmlhttp.responseText)
function processJSON(jsonDoc)
{
{
users:
[ {"name": "Luca", surname: "Cosmo", email: "[email protected]" },
var users = eval(jsonDoc);
{"name": "Renzo", surname: "Orsini", email: "[email protected]" }
for(var i=0; i<users.length; i++)
]
};
{
var user = users[i];
var row = document.createElement("tr");
row.innerHTML =
"<td>"+user.name+"</td><td>"+user.surname+"</td><td>"+user.email+"</td>";
document.getElementById("users").appendChild(row);
}
}
Visualizza nel browser
• La funzione eval serve ad eseguire come script JavaScript una
qualsiasi stringa
• Valutare un file Json significa costruirne l’oggetto corrispondente
JavaScript – jQuery

jQuery is a JavaScript Library.

jQuery greatly simplifies JavaScript programming.

jQuery is easy to learn.
LINK UTILI:
 http://jquery.com/
 http://www.w3schools.com/jquery/default.asp