Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
AJAX (1)
AJAX significa Asynchronous Javascript
And XML.
Non una tecnologia, ma un modo di
utilizzare assieme una serie di
tecniche di programmazione lato client e
lato server per ottenere applicazioni web
piu interattive.
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 5
AJAX (2)
HTML "tradizionale"
ad ogni azione dellutente corrisponde una richiesta al
server,
che provoca la spedizione di unintera pagina HTML verso il
browser
AJAX (3)
AJAX (4)
Insieme di tecnologie (non specificamente server-side,
ma prevalentemente client -side):
XHTML e CSS standard;
Visualizzazione e interazione dinamica tramite
Document Object Model;
Scambio dati e manipolazione basate su XML e
XSLT;
XSLT
Recupero asincrono di dati tramite loggetto
XMLHttpRequest;
XMLHttpRequest
Il tutto connesso tramite Javascript
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 8
AJAX (5)
AJAX (6)
AJAX utile per creare interfacce "ricche",
che vadano oltre l'attuale modello per il
web.
Quindi applicazioni web e non semplici pagine
informative.
Problemi?
Accessibilit: pu degradare.
Explorer 5.5 e 6 implementano
XMLHttpRequest tramite ActiveX.
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 10
XMLHttpRequest: attributi
onreadystatechange: contiene la funzione che
gestisce levento lanciato, ad ogni cambiamento di stato.
readyState: stato corrente dell'istanza di
XMLHttpRequest:
0 = non inizializzato, 1 = aperto, 2 = richiesta inviata,
3 = risposta in ricezione e 4 = risposta ricevuta.
Esercizio
Svilupperemo una pagina web con tre campi
di input in cui inseriremo tre numeri per i
valori di R,G,B con cui impostare il colore di
sfondo della pagina,
Il tutto asincronamente (senza ricaricare).
(NB: si pu fare tutto solo con Javascript! Ma
lesercizio pi semplice)
Struttura
Una pagina web dotata di alcune funzioni lato client
scritte in Javascript:
dopo avere scritto la stringa nei campi di input, una
funzione invia i valori alla parte lato server e aggiorna
dinamicamente la pagina alla ricezione del risultato,
senza ricaricare la pagina completa;
due parti: il codice XHTML e quello Javascript.
Uno script PHP: riceve i valori R G B via GET dalla
parte lato client, costruisce la stringa rgb(R,G,B) e
la invia indietro alla pagina web.
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 16
La parte Javascript/1
<html>
<head>
<title>Colori RGB</title>
<script type="text/javascript">
function spedisci(R,G,B) {
document.getElementById("descrizione").innerHTM
L = "---attendi...----";
server = 'ajaxserver1.php?R=' + R + '&G=' + G +
'&B=' + B;
richiesta = new XMLHttpRequest();
richiesta.onreadystatechange = updateasincrono;
richiesta.open("GET", server, true);
richiesta.send(null);
}
La parte Javascript/2
function updateasincrono()
{
if ((richiesta.readyState == 4) &&
(richiesta.status == 200)) {
esito=richiesta.responseText;
document.getElementById("corpo").style.background
=esito;
document.getElementById("descrizione").innerHTML
=esito;
}
}
</script>
</head>
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 19
Commenti
spedisci(R,G,B): invia la richiesta asincrona,
allurl ajaserver1.php, con query uguale a R=r&G=g&B=b
stabilendo che la gestione della risposta verr fatta dalla funzione
updateasincrono()
Sicurezza
Same Origin Policy:
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript
Dettagli dellapplicazione
Il file di testo sul server si chiamer
lista_computer.txt e conterr in ogni riga il
nome di un computer.
La pagina PHP computer.php accetta in input come
parametro una stringa che utilizza come filtro per
produrre in output soltanto le righe del file
lista_computer.txt che la contengono.
La pagina statica AjaxComputerList.html
conterr il codice Javascript responsabile dellinoltro
della richiesta al server web e della visualizzazione della
risposta.
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 24
Il file lista_computer.txt
Dell Optiplex
Dell Inspiron
Dell Dimension
iMac
Sun Ultra 1
Gateway laptop
...
Gateway 800
Palm VII
Handspring Visor
Atari
Beowulf Cluster II
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 25
computer.php
<?php
if(!isset($_REQUEST['query']))
$query="";
else
$query=$_REQUEST['query'];
$filename='lista_computer.txt';
$f = fopen($filename, "r");
$contenuto = fread($f, filesize($filename));
fclose($f);
$computer = explode("\n",$contenuto);
$risultato="";
for($i=0; $i<count($computer); $i++)
if(!(stripos($computer[$i],$query)===false))
$risultato=$risultato . $computer[$i] . "<br>";
echo $risultato;
?>
La pagina statica
<html>
<head>
<title>
</title>
<script type="text/javascript"><!-...
//--></script>
</head>
<body>
<form name="mioform">
Inserisci una stringa: <input type="text" name="query" size="10"
onBlur="javascript:RecuperaLista();"><br>
<span id="risultato"></span>
</form>
</body>
</html>
RecuperaLista
function RecuperaLista() {
document.getElementById("risultato").innerHTML = "
ricerca in corso ";
var valore = window.document.mioform.query.value;
richiesta = new XMLHttpRequest();
richiesta.onreadystatechange = UpdateAsincrono;
richiesta.open("GET","computer.php?query="+valore,
true);
richiesta.send(null);
}
UpdateAsincrono
function UpdateAsincrono() {
if((richiesta.readyState == 4) && (richiesta.status
== 200)) {
var esito = richiesta.responseText;
document.getElementById("risultato").innerHTML =
esito;
}
}
Esempio di esecuzione
In Explorer 6
Loggetto XMLHttpRequest realizzato con
un ActiveX, quindi:
if (window.XMLHttpRequest) { //
Mozilla, Safari,
richiesta = new XMLHttpRequest();
} else if (window.ActiveXObject) { //
IE
richiesta = new
ActiveXObject(Msxml2.XMLHTTP); //IE6
}
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 32
xmlHttp=new XMLHttpRequest();
}
catch(e) {
...
Complementi di Tecnologie Web A.A. 2011-2012 M.Franceschet, V.Della Mea e I.Scagnetto - 33