404 file non trovato errore

Transcript

404 file non trovato errore
Ajax
1
Pasqualetti Veronica
AJAX: Introduzione
2
 AJAX (Asynchronous
(A
h
J
JavaScript
S i t And
A d XML) è
una tecnica per la creazione di applicazioni Web
interattive.
 Permette l’aggiornamento
l aggiornamento asincrono di
porzioni di pagine HTML
 Utilizzato
U ili
per iincrementare:
 l’interattività
 la velocità
 l’usabilità
l’
bili à
AJAX: Tecnologia?
 Non è un linguaggio di programmazione o una
g specifica
p
tecnologia
 E’ un termine che indica l’utilizzo di una combinazione di
tecnologie comunemente utilizzate sul Web:
 XHTML e CSS
 DOM modificato attraverso JavaScript
p p
per la
manipolazione dinamica dei contenuti e dell’aspetto
 XMLHttpRequest per lo scambio di messaggi asincroni
fra browser e web server
 XML come meta-linguaggio dei dati scambiati
AJAX: Architettura (1/3)
4
AJAX: Architettura (2/3)
5
AJAX: Architettura (3/3)
6
AJAX: Un po
po’ di storia
7
 Inizialmente sviluppatto da Microsoft (XMLHttpRequest)
come oggetto
gg
ActiveX
 In seguito implementato in tutti i principali browser ad
iniziare da Mozillla 1.0 sebbene
bb
con alcune differenze
 Il W3C sta sviluppando/revisionando standard con
funzionalità simili ad XMLHttpRequest: Document Object
Model (DOM) Level 3 Load and Save Specification
 Il termine Ajax è comparso per la prima volta nel 2005 in
un articolo di Jesse James Garrett (web designer , autore di
libri famosi relativi alla “user
user experience
experience” nel web)
 Un esempio: Gmail utilizza AJAX
Ajax: Pro
8

Usabilità
Interattività (Improve user experience)
 Non costringe l’utente all’attesa di fronte ad una pagina
bianca durante la richiesta e l’elaborazione delle pagine
(non più click-and-wait)


Velocità
Minore quantità di dati scambiati (non è necessario
richiedere intere pagine)
 Una parte della computazione è spostata sul client


Portabilità (dipende…)
Supportato dai maggiori browser
 Se
S correttamente
tt
t utilizzato
tili t è platform-independent
l tf
i d
d t
 Non richiede plug-in

Ajax: Contro (1/2)
9

Usabilità
Pulsante “Indietro”
Indietro
 Inserimento di segnalibri
 Essendo i contenuti dinamici spesso
p
non sono indicizzati
dai motori di ricerca


Accessibilità
Non supportato da browser non-visuali
 Prevedere meccanismi di accesso alternativi

Ajax: Contro (2/2)
10


Configurazione: necessario aver abilitato Javascript
((in Internet Explorer
p
– vecchie versioni - è necessario
aver abilitato anche gli oggetti ActiveX)
Compatibilità:
p
necessario un test approfondito sui diversi browser per
evitare problemi dovuti alle differenze fra i vari browser
 E’ bene prevedere funzionalità alternative per i browser che
non supportano Javascript

Creare un
un’applicazione
applicazione AJAX
11
 Un’applicazione AJAX è divisa in 3 momenti
fondamentali:
1. Creazione e configurazione delle richieste
per il server
2
2.
Esecuzione e memorizzazione delle
risposte (o errori)
3. Modifiche
M difi h all DOM (D
(Document Object
Obj
Model) della pagina
Document Object Model
12
Ricordiamo che DOM è lo standard ufficiale del W3C
per la rappresentazione
p
pp
di documenti strutturati in
maniera da essere neutrali sia per la lingua che per la
piattaforma. DOM è inoltre la base per una vasta
gamma delle interfacce di programmazione delle
applicazioni; alcune di esse sono standardizzate dal
W C
W3C.
HTML
HEAD
BODY
H1
P
Ajax usa JS: oggetti Javascript
13
AJAX in pratica
14
 Ajax è fondamentalmente l'unione di due aspetti:
 La capacità di Javascript di aggiornare parte di una pagina
HTML senza che questa venga caricata nuovamente.
 La capacità di Javascript di fare richieste tramite il protocollo
HTTP.
 Molto spesso si parla di Ajax anche quando soltanto
una di queste due caratteristiche viene utilizzata.
Iniziamo esplorando
p
la p
prima capacità:
p
aggiornare
gg
le
pagine in tempo reale tramite Javascript.
Un esempio utilizzando le proprietà CSS
15
<script>
function show_hide() {
var e = document.getElementById(
document getElementById(“testo");
testo );
if (e.style.visibility == 'hidden') {
e.style.visibility = 'visible';
visible ;
e.style.display = 'block';
} else {
e.style.visibility
l
b l = 'hidden';
h dd
e.style.display = 'none‘;}
}
</script>
p
e scompare!!</div>
p
/
<div id=“testo“>Testo che compare
<input type="button" value="Clicca per far sparire/ricomparire"
onClick=" show_hide();" />
innerHTML e outerHTML
16
 Nonostante non siano standard DOM, Javascript permette di
leggere/scrivere interi elementi, trattandoli come stringhe:
•
•
innerHTML: legge/scrive il contenuto di un sottoalbero (escluso il
tag dell’elemento radice)
outerHTML:: legge/scrive
oute
egge/sc e il co
contenuto
te uto d
di u
un eelemento
e e to ((incluso
c uso il
tag dell’elemento radice)
// HTML: <div id="d"><p>Paragrafo!</p></div>
d = document.getElementById("d");
alert(d.innerHTML);
alert(d
innerHTML); // stampa: <p>Paragrafo!</p>
alert(d.outerHTML); // stampa: <div id="d"><p>Paragrafo!</p></div>
d.innerHTML
d
innerHTML = “<ul><li>Lista!</li></ul>”;
<ul><li>Lista!</li></ul> ;
// trasforma il DIV in <div id="d"><ul><li>Lista!</li></ul></div>
Esempio con innerHTML (1/2)
17
<script type=
type="text/javascript"
text/javascript language=
language="javascript">
javascript >
function ReloadTextDiv() {
var NewText = document.form1.txtcode.value; var DivElement =
document.getElementById( preview );
document.getElementById("preview");
DivElement.innerHTML = NewText; }
function changeHTML(ID,code){
var DivElement = document.getElementById(ID);
DivElement.innerHTML = code; }
function ShowHidePreview(){
if(document getElementById("preview")
if(document.getElementById(
preview ).style.display==
style display==''){
){
HideDiv("preview"); mystring = '<a
href="javascript:ShowHidePreview();">Mostra Anteprima</a>'; }
else{{
ShowDiv("preview"); mystring = '<a
href="javascript:ShowHidePreview();">Nascondi Anteprima</a>'; }
changeHTML("previewc",mystring); } function HideDiv(ID){
d
document.getElementById(ID).style.display='none';
t tEl
tB Id(ID) t l di l
'
' }
function ShowDiv(ID){ document.getElementById(ID).style.display=''; }
</script>
Esempio con innerHTML (2/2)
18
<body onload=
onload="ReloadTextDiv();">
ReloadTextDiv(); >
<div id="formcontainer">
<p>Inserisci del codice nella casella di testo sottostante e clicca sul link
sottostante per attivare l'anteprima!<br
l anteprima!<br />Tutti i tag sono supportati
supportati. </p>
<form id="form1" name="form1" method="post" action="">
<textarea name="txtcode" cols="100" rows="10" onkeyup="ReloadTextDiv()"
style="border:1px
l "b d
solid
lid
#FFCCFF;
FFCCFF color:
l
#990000;"><h3>scrivi qui</h3></textarea>
</form>
</div>
<div id="previewc" style="background-color:#CCCCCC; marginp3 p ;
top:30px;">
<a href="javascript:ShowHidePreview();">Mostra Anteprima</a>
</div>
<div id=
id="preview"
preview style=
style="display:none;
display:none; border: 1px solid #CCCCCC;
padding:6px;">
</div>
</b d >
</body>
XMLHttpRequest
19
 Javascript è capace di fare richieste HTTP in
background
g
sia utilizzando il metodo GET che il
POST.
 Per poter fare tale richiesta è necessario utilizzare un
oggetto che si chiama XMLHttpRequest in tutti i
browser moderni.
 Ciò che serve per fare una richiesta HTTP in Ajax è
Javascript e dall'altra
dall altra parte (nel server) qualcuno che
risponda alla richiesta, noi lo faremo con script in
PHP. Ovviamente ll'applicazione
applicazione server
server-side
side può
essere scritta in qualunque linguaggio.
XMLHttpRequest: compatibilità
20
 Se parliamo di AJAX, oggi, parliamo di un oggetto
specifico: XMLHttpRequest. A seconda del
browser usato prende nomi differenti o viene
richiamato in maniera differente.
differente
 Nel caso di Internet Explorer (vecchie versioni)
l’
l’oggetto
XMLH R
XMLHttpRequest
è restituito
i i d
da un
ActiveXObject mentre nei browsers alternativi più
diffusi (Mozilla, Safari, FireFox, Netscape, Opera ed
p q
è supportato
pp
nativamente.
altri)) XMLHttpRequest
Accade anche con IE dalla versione 7.
Metodi XMLHttpRequest
21
 open( metodo, URL, async ): Specifica il metodo GET o





POST, l'URL e altri parametri opzionali per la richiesta.
send(
d( content ):
) Invia
I i la
l richiesta
i hi
setRequestHeader( chiave, valore): Aggiunge la
coppia chiave/valore alla richiesta da inviare; esempio:
setRequestHeader('Content-type ', 'application/x-www;
; );
form-urlencoded;charset=UTF-8;');
abort(): Cancella la richiesta in atto
getAllResponseHeaders():
g
p
() Restituisce sotto forma di
stringa tutti gli header HTTP ricevuti dal server
getResponseHeader( nome_header ): Restituisce il
valore
l
d
dell'header
ll'h d HTTP specificato;
ifi
esempio:
i
getResponseHeader("Content-Length")
Prorietà XMLHttpRequest
22
 onreadystatechange: gestore dell'evento lanciato ad





ogni cambiamento di stato
readyState:
d S
rappresenta iin ognii iistante llo stato d
della
ll
richiesta
responseText: dati restituiti dal server ad operazione
ultimata in formato string
responseXML: dati restituiti dal server ad operazione
ultimata in formato XML
status: contiene esattamente il codice HTTP di risposta
p
restituito dal server, se l'interazione ha successo status
contiene il valore 200
statusText:
T
d
descrizione
i i
d
dell codice
di HTTP ritornato
i
dal
d l
server nel parametro status
Stati di readyState
23
 0 = Uninitialized: l'oggetto esiste ma non è stato




istanziato;
1 = Open: l'oggetto è aperto;
2 = Sent: la
l richiesta
h
è stata inviata;
3 = Receiving:
g i dati stanno arrivando a
estinazione;
4 = Loaded: operazione completata.
completata
Creazione dell’oggetto
d ll
XMLHttpRequest
24
if (window.XMLHttpRequest)
// Mozilla, Safari,...
{
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
http_request.overrideMimeType('text/xml');
}
else if (window.ActiveXObject)// Internet Explorer (old vers.)
{
try {
h
http_request
= new ActiveXObject("Msxml2.XMLHTTP");
i
bj
("
l2
")
}
catch (e)
{
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {…}
}
}
Inizializzazione della richiesta
25
 Prima di inviare la richiesta è necessario specificare la
funzione che si occuperà di gestire la risposta e aprire la
connessione con il server
http request onreadystatechange = nameOfTheFunction;
http_request.onreadystatechange
http_request.open('GET','http://www.example.org/some.file',true);
•
I parametri della ‘open’ specificano:
• il metodo HTTP della richiesta,
• l’URL a cui inviare la richiesta,
• un booleano che indica se la richiesta è asincrona
Invio della richiesta
26
 La richiesta viene inviata per mezzo di una ‘send’
http_request.send(null);
•
Il pa
parametro
a et o de
della
a ‘send’
se d contiene
co t e e i dati
dat da inviare
a ea
al se
server
e :
• per una POST ha la forma di una query-string
•
•
•
name=value&anothername=othervalue&so=on
per un GET ha valore “null” (in questo caso i parametri
sono passati tramite l’URL indicato della precedente “open”)
può anche essere un qualsiasi altro tipo di dati; in questo caso
è necessario specificare il tipo MIME dei dati inviati
http_request.setRequestHeader('Content-Type',
p
q
q
(
yp , 'mime/type');
/ yp );
Gestione della risposta (1/2)
27
 La
L funzione
f
i
incaricata
i
i
di gestire
i lla risposta
i
d
deve
controllare lo stato della richiesta
if (http_request.readyState == 4) {
// everything is good, the response is received
}
else {
// still not ready
}
•
I valori per ‘readyState’ possono essere:
• 0 Uninitialized ll'oggetto
oggetto XMLHttpRequest esiste,
esiste ma non è stato
richiamato alcun metodo per inizializzare una comunicazione
• 1 Open è stato richiamato il metodo open() ed il metodo send() non
h ancora effettuato
ha
ff tt t l'i
l'invio
i d
dati
ti
• 2 Sent il metodo send() è stato eseguito ed ha effettuato la richiesta
• 3 Receiving i dati in risposta cominciano ad essere letti
• 4 Loaded l'operazione è stata completata
Gestione della risposta (2/2)
28
E’ poi necessario controllare lo status code della risposta HTTP
if (http_request.status == 200) {
// perfect!
}
else {
// there was a problem with the request,
// for example the response may be a 404 (Not Found)
// or 500 (Internal Server Error) response codes
}
•
IInfine
fi è possibile
ibil lleggere lla risposta
i
t iinviata
i t d
dall server utilizzando:
tili
d
• http_request.responseText che restituisce la risposta
come testo semplice
• http_request.responseXML che restituisce la risposta
come XMLDocument
Esempio (1/2)
29
 Creiamo una pagina php che calcola la somma di due
parametri ricevuti in GET.
<?php
h
print ($_
p
($ GET['a']+$
[ ] $_GET['b']);
[ ]);
?>
Esempio (2/2)
30
<html>
<head>
<script language="javascript">
var myRequest = null;
function CreateXmlHttpReq(handler) {
var xmlhttp = null;
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = handler;
p;
return xmlhttp;
}
function myHandler() {
if (myRequest.readyState == 4 && myRequest.status == 200) {
alert(myRequest responseText);
alert(myRequest.responseText);
}
}
function esempio1() {
myRequest = CreateXmlHttpReq(myHandler);
myRequest.open("GET","esempio1.php?a=3&b=5",true);
myRequest.send(null);
}
</ i t>
</script>
<head>
<body>
<input type="button" value="Clicca per lanciare la richiesta" onClick="esempio1()" />
</body>
/b d
<html>
Modifiche alla funzione CreateXmlHttpReq
per utilizzarla con qualunque browser
31
function CreateXmlHttpReq(handler) {
var xmlhttp = null;
if (window.XMLHttpRequest)
// Mozilla, Safari,...
{
xmlhttp
lhtt = new XMLHttpRequest();
XMLHtt R
t()
if (xmlhttp.overrideMimeType)
xmlhttp.overrideMimeType('text/xml');
}
else if (window.ActiveXObject)// Internet Explorer (old vers.)
{
try {
xmlhttp
p = new ActiveXObject("Msxml2.XMLHTTP");
j
}
catch (e)
{
tryy {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) { // }
}
}
xmlhttp.onreadystatechange = handler;
return xmlhttp;
}
Esercizi
32
 Modificare il codice :
 mettere un DIV nella pagina e tramite la proprietà
innerHTML mostrare il risultato della richiesta aggiornando il
DIV direttamente, invece che utilizzare un alert.
 Trasformare la richiesta da GET a POST, con due campi di
input in cui inserire i valori da sommare.
Commenti all’uso
all uso di pagine dinamiche
33
Richiamare una pagina php potrebbe non garantire il
giusto risultato.
PERCHE’?
 IE fa
f il caching
hi delle
d ll richieste
i hi t HTTP ffatte
tt in
i questo
t
modo, quindi effettuando più volte la chiamata,
anche
h se llo script
i PHP richiamato
i hi
d
dovrebbe
bb produrre
d
risultati diversi, il risultato ottenuto potrebbe essere
sempre lo stesso.
 SOLUZIONE: pagina.php?rand
pagina.php?rand=NumeroCasuale
NumeroCasuale
 “pagina.php?param1=val1&rand=“+Math.random()
Cosa è cambiato?
34
XML
35
 Asynchronous
 Javascript
 and
d XML
 XML è una delle tre parti
parti, ma noi abbiamo utili
utilizzato
ato Ajax
Aja
senza utilizzare XML
 Chi ha coniato il termine pensava che il modo migliore per
comunicare tra il programma che risiede sul server, e il client
che fa la richiesta in Ajax, fosse quello di utilizzare XML.
 XML in
i effetti
ff tti permette
tt di ““passare”” grandi
di quantità
tità di d
dati
ti ed
d
anche informazioni aggiuntive per ogni dato … gli attributi.
 ESEMPIO: non disponendo di un database potrei registrare
gli utenti di un sito in un file xml correttamente strutturato e
salvato sul server.
Esempio con XML e php: slide.php
slide php
36
<?php
header( "Content-type: text/xml" );
?>
<slides>
<?php
if ($handle = opendir('jpg')) {
while (false !== ($file = readdir($handle)))
{
if ( preg_match( "/[.]JPG$/", $file ) ) {
preg_match( "/_(\d+)_(\d+)[.]/", $file, $found );
?>
<slide src="jpg/<?php echo $file; ?>"
width="<?php echo $found[1]; ?>"
height="<?php echo $found[2]; ?>" /><?php echo( "\n" ); ?>
<?php
? h
}
}
closedir($handle);
}
?>
</slides>
Slide php
Slide.php
37
 La pagina slide.php realizza l’xml che rappresenta l’elenco
delle immagini presenti in una specifica cartella del server:
<slides>
<slide src="jpg/Diapositiva1.JPG" width="" height="" />
<slide src=
src="jpg/Diapositiva2
jpg/Diapositiva2.JPG
JPG" width=
width="" height=
height="" />
<slide src="jpg/Diapositiva3.JPG" width="" height="" />
<slide src
src="jpg/Diapositiva4.JPG"
jpg/Diapositiva4.JPG width
width="" height
height="" />
<slide src="jpg/Diapositiva5.JPG" width="" height="" />
…
…
</slides>
 Realizzeremo ora una pagina che visualizza queste immagini
in una pagina html.
Slide html (1/2)
Slide.html
<html><body ><table><tbody
id="dataTable“></tbody></tabl
e>
<script>
function processReqChange(){
if (req.readyState == 4 &&
req status == 200 &&
req.status
req.responseXML != null){
var dto =
document getElementById(
document.getElementById(
'dataTable' );
var items = [];
var nll =
req.responseXML.getElementsBy
TagName( 'slide' );
38
for( var i = 0; i < nl.length;
nl length; i++ ) {
var nli = nl.item( i );
var src = nli.getAttribute( 'src'
) toString()
).toString();
var trNode =
document.createElement( 'tr' );
var srcNode
d =
document.createElement( 'td' );
srcNode.innerHTML = "<img
src='"+src+"'></img>";
'"
"' /i
"
trNode.appendChild( srcNode );
pp
( trNode );
dto.appendChild(
}}}
… continua
Slide html (2/2)
Slide.html
function loadXMLDoc( url ){
req = false;
(
p q
){
if(window.XMLHttpRequest){
try {
req = new
XMLHttpRequest();
} catch(e) {
q = false;; }}
req
else if(window.ActiveXObject){
try {
req = new
ActiveXObject("Msxml2.XML
HTTP");}
catch(e) {
39
try {
req = new
ActiveXObject("Microsoft.XM
LHTTP")
LHTTP");
} catch(e) {
req = false; }
}
}
if(req) {
req.onreadystatechange =
processReqChange;
req.open("GET", url, true);
req.send(""); }}
loadXMLDoc( 'slide.php' );
</script></body></html>
Framework per AJAX
40
 Un framework fornisce allo sviluppatore un'architettura
ben definita, basata su classi e librerie specifiche, nella
quale ci si muove osservando regole ben precise che
consentono di realizzare applicazioni senza dover
partire da zero.
p
 Un Framework per Ajax è il motore che permette ad
un sito di sfruttare gli effetti Ajax sempre più presenti nei
siti
i i denominati
d
i iW
Web
b 2.0.
 Ne esistono diversi e ne nasceranno sempre di più in
quanto è si tratta di un linguaggio libero e alla portata di
molti programmatori, la differenza principale sta nel
p di effetto ma q
quanto più
p
risultato finale cioè il tipo
importante la leggerezza dello script.
Framework e/o ToolKit
41
 In rete si trovano molti “pacchetti” sotto il nome di
framework o toolkit p
per ajax.
j
 In realtà dal punto di vista formale ci sono delle
differenze:


Un framework è uno strato intermedio che offre classi, oggetti,
funzioni, etc che è possibile utilizzare per agevolare la
programmazione
Un toolkit è l’insieme di librerie e utility che facilitano e
velocizzano
l i
la
l fase
f
di programmazione
i
 In ambedue i casi l’idea è utilizzare “codice” già
sviluppato
il
t per semplificare
lifi
lla vita
it d
dell
programmatore.
Framework JavaScript
42
 Ricordiamo che AJAX più che un linguaggio è una
tecnica che sfrutta il linguaggio JavaScript, quindi un
framework per AJAX in realtà realizza funzionalità
in JavaScript.
JavaScript
 Alcuni framework JavaScript che offrono
f
funzionalità
i
li à per AJAX sono:




JQuery (http://jquery.com/ )
MooTools (http://mootools.net/ )
Prototype (http://www.prototypejs.org/ )
Ne esistono altri, questa è solo una lista di esempio
Toolkit JavaScript per AJAX
43
 Anche per i toolkit resta valido il concetto che sono
scritti in JavaScript e offrono utility per AJAX
 Alcuni toolkit presenti in rete sono:




Dhtmlx
Dh
l (http://dhtmlx.com/
(h
//dh l
/)
DOJO (http://www.dojotoolkit.org/ )
SimpleJS (http://simplejs.bleebot.com/ )
Anche in questo caso si tratta solo di una lista di esempio (le
risorse
i
presentii in
i rete sono molte!)
l )
Framework JQuery
44
 jQuery è un framework nato con l'intento di facilitare la
scrittura di operazioni JavaScript che altrimenti
richiederebbero diverse,
diverse se non troppe righe di codice
codice.
 Oltre a questo jQuery permette di attuare in maniera semplice
ma altrettanto efficiente AJAX.
 Quindi con jQuery non dobbiamo direttamente lavorare
sull'oggetto XMLHttpRequest, ma sono messi a disposizione
dell'utente
dell
utente dei metodi appositi.
appositi
 JQuery offre diversi astrazioni per implementare AJAX. Vi è
un'implementazione
p
di basso livello che è utilizzabile tramite
la funzione $.ajax() che ritorna un XMLHttpRequest e offre
notevoli funzionalità.
$ serve ad istanziare l’oggetto
l oggetto principale del framework, che è
proprio jQuery, quindi $.ajax() equivale a jQuery.ajax()
jQuery
45
 jQuery divide le funzionalità in due macrocategorie:
 i metodi per le richieste AJAX,
AJAX ovvero quei metodi che
ritornano solitamente una XMLHttpRequest;
 gli eventi AJAX invece che corrispondono ad eventi
significativi che coinvolgono chiamate AJAX. Un esempio è
quando la richiesta è completata.
jQuery: $.ajax()
$ ajax()
46
 $.ajax( options ) ritorna XMLHttpRequest
 options:
p
coppie
pp chiave/valore
/
di opzioni
p
p
per configurare
g
la
chiamata AJAX.
 utilizzo: $.ajax({ nome_opzione1: valore1, nome_opzione2:
valore2});
l
})
 Offre molte funzionalità tramite le options che si
possono settare. G
Grazie
i alla
ll modifica
difi di queste offre
ff
all'utente la massima personalizzazione della
chiamata.
hi
t
 Vedremo alcune options con un esempio, prima
vediamo altre funzioni
jQuery: La funzione load()
47
 load (url, [data], [callback]) ritorna jQuery
 utilizzo:
$(dove_caricare).load("file_html“, {dati_da_inviare},
function(){.....});
 La
L funzione
f
i
l d serve a caricare
load
i
del
d l codice
di HTML di un file
fil
remoto ed inserirlo dentro il DOM di un documento.
 Di default viene effettuata una richiesta tramite il metodo
GET, ma è possibile utilizzare il POST passando i dati con il
pp chiave/valore.
/
Q
Questa funzione va utilizzata,,
formato coppia
di norma, su di un div sul quale si vuole caricare del codice
HTML. Questa operazione ovviamente è asincrona e avviene
senza dover
d
ricaricare
i i
lla pagina.
i
jQuery: Le funzioni get() e post()
48
 La funzione $.get() carica una pagina remota usando una
richiesta HTTP attraverso il metodo GET.
Questa funzione è una sorta di scorciatoia che permette di
inviare una semplice richiesta GET al server senza il bisogno
di utilizzare la più complessa funzione $.ajax(): è stata
introdotta proprio per semplificare la creazione
crea ione di chiamate
AJAX quando queste sono molto semplici.
 La funzione $.post() carica una pagina remota usando una
richiesta HTTP attraverso il metodo POST.
E' speculare alla funzione $.get() vista poco sopra e anche essa
non è nient'altro
nient altro che una semplificazione della funzione
$.ajax().
 Se si vuole avere una funzione p
per l'errore e una p
per il
successo si deve tornare ad utilizzare $.ajax().
jQuery: alcuni eventi
49
 ajaxStart (globale): questo evento è attivato quando una







chiamata AJAX comincia e nessun'altra chiamata concorrente è
in esecuzione;
beforSend (locale): questo evento è attivato prima che una
chiamata AJAX cominci e permette di effettuare modifiche ad
esempio
i agli
li headers
h d
d ll'
dell'oggetto
tt XMLHttpRequest;
XMLHtt R
t
ajaxSend (globale): evento attivato prima che la richiesta sia in
esecuzione. Uguale
g
ap
prima ma è un evento g
globale;
success (locale): evento attivato solo se la chiamata ha successo,
cioè senza errori provenienti dal server o errori nei dati di ritorno;
ajaxSuccess(globale): equivalente dell
dell'evento
evento di prima,
prima ma è un
evento globale;
error (locale): evento attivato se e solo se avviene un errore;
ajaxError (globale): come error ma globale;
ajaxStop (globale): attivato quando non ci sono più richieste
AJAX da processare.
processare
Confronto tra l'utilizzo classico di
XMLHTTPREQUEST e jQuery
50
 Supponiamo di voler caricare dinamicamente ed eseguire
al click di un button nella nostra pagina una function
javascript "HelloWorld()“ che si trova in un file
HelloWorld.js
 Confrontiamo la realizzazione con XMLHttpRequest e
con jQuery
 Nella pagina troverò:
<div>
<i
<input
t type="button"
t
"b tt " id="btnGO"
id "bt GO" value="GO!!!"
l
"GO!!!"
onclick="CallExternalScriptMethod(
'HelloWorld
HelloWorld.js
js','HelloWorld()')"
HelloWorld() ) />
</div>
Lo Script con XMLHttpRequest
51
<script type ="text/javascript">
function CallExternalScriptMethod(scriptUrl, targetCall) {
var AJAX = null;
if (window.XMLHttpRequest) AJAX = new XMLHttpRequest();
else AJAX = new ActiveXObject(
ActiveXObject("Microsoft.XMLHTTP");
Microsoft.XMLHTTP );
AJAX.onreadystatechange = function() {
if (AJAX.readyState == 4 && AJAX.status == 200) {
eval(AJAX.responseText);
l
eval(targetCall);}
}
AJAX.open("GET", scriptUrl, true);
AJAX.send(null);;
}
</script>
Lo Script con jQuery
52
<script type ="text/javascript" src
="http://code.jquery.com/jquery-latest.js"></script>
<script
i type ="text/javascript">
"
/j
i "
function CallExternalScriptMethod(scriptUrl, targetCall)
{
$.getScript(scriptUrl, function() {
eval(targetCall);
});
}
</script>
 Molto più breve!!!
ToolKit DHTMLX
53
 DHTMLX è una libreria JavaScript che fornisce
funzionalità essenziali per lo sviluppo di applicazioni
web cross-browser.
 Offre
Off una raccolta
lt completa
l t di componenti
ti per
l’interfaccia utente, ad esempio: griglie, combo,
strutture gerarchiche,
hi h calendari,
l d i etc
 Il tutto basato sulla tecnologia
g AJAX ed utilizzabile
con qualunque linguaggio server (php, asp, java, etc)
Come utilizzare DHTMLX
54
 A differenza di un framework un toolkit non richiede
di studiare metodi e proprietà degli oggetti offerti ma
è possibile procedere per esempi
 Ovvero
O
una volta
lt scelto
lt il componente
t che
h sii vuole
l
implementare nel sito è sufficiente includere il file js
correttii e utilizzare
ili
il codice
di ffornito
i di esempio
i
insieme al componente stesso.
 CONTRO: trattandosi di componenti “preconfezionati” la flessibilità è minore.
confezionati
Un esempio: dhtmlxgrid
55
 Si tratta di una visualizzazione tabellare di dati
user friendly e accattivante dal punto di vista
user-friendly
estetico
 Nel nostro caso i campi saranno tutti editabili e
quelli di tipo data compilabili tramiti un
minicalendario.
minicalendario
Dhtmlxgrid: il file dei dati
56
 Facciamo l’ipotesi di avere un file XML contente i dati della
nostra tabella (se i dati sono sul server, si occuperà della
creazione del file uno script lato server [php,
[php asp,
asp jsp,
jsp etc])
 Il file deve rispettare alcune regole di struttura imposte dal
p
componente.
<rows>
<row id="1“><cell>John Grisham</cell><cell>08/02/1955</cell><cell/></row>
<row id
id="2“><cell>Stephen
2 ><cell>Stephen King</cell><cell>21/09/1947</cell><cell/></row>
<row id=“3”><cell>Michel Oshpic</cell><cell>12/01/1971</cell><cell/></row>
<row id="9“><cell>Honore de
Cruason</cell><cell>12/01/1991</cell><cell/></row>
/
/ / 99 /
/ /
</rows>
Lo Script che visualizza i dati
57
<script>
mygrid = new dhtmlXGridObject('gridbox');
mygrid.setImagePath("../../codebase/imgs/");
mygrid.setHeader("Name,Date of Birth, First Book Published");
mygrid.setInitWidths("*,100,100");
id tI itWidth ("*
")
mygrid.setColAlign("left,center,center");
mygrid setColTypes("ed
mygrid.setColTypes(
ed,dhxCalendar,dhxCalendarA
dhxCalendar dhxCalendarA");
);
mygrid.setColSorting("str,date,date");
mygrid setSkin("dhx
mygrid.setSkin(
dhx_skyblue
skyblue");
);
mygrid.init();
yg
(
);
mygrid.loadXML(“dati.xml");
</script>
Commenti allo script
58
 Il componente in pratica è l’oggetto mygrid
istanziato con new dhtmlXGridObject(
dhtmlXGridObject('gridbox');
gridbox );
 Tramite l’utilizzo dei metodi esposti viene
caratterizzata
i
la
l grid
id
•
Se il file XML deve essere il frutto di un’elaborazione sul server
all’ultima riga troveremo scritto qualcosa del genere:
mygrid.loadXML(“dati.php?tipo=scrittori");
Framework e toolkit che coinvolgono altri
linguaggi oltre JavaScript
59
 Google Web Toolkit – GWT (Java)





p //
g g
/
/
/
/
http://code.google.com/intl/it-IT/webtoolkit/
OPENXAVA (Java)
http://www openxava org/web/32035/ajax-frameworkhttp://www.openxava.org/web/32035/ajax
framework
b?src=ajax-b
Ajax Control Toolkit (ASP.NET)
(ASP NET)
http://www.asp.net/ajaxlibrary/act.ashx
Aj Agent
Ajax
A
(PHP) http://www.hemmady.com/ajaxagent
h
//
h
d
/ j
CakePHP (PHP) http://cakephp.org/
Ne esistono tanti altri ….
Riferimenti AJAX
60
 Ajax: A New Approach to Web Applications articolo
di Jesse James Garrett
http://www.adaptivepath.com/publications/essays/ar
chives/000385 php
chives/000385.php
 AJAX:Getting Started
p //
p
g/ /
/
g_
https://developer.mozilla.org/en/AJAX/Getting_Start
ed