Sviluppare applicazioni Web 2.0 con Ajax



Documenti analoghi
Siti interattivi e dinamici. in poche pagine

Corso di PHP. Prerequisiti. 1 - Introduzione

AJAX. Goy - a.a. 2006/2007 Servizi Web 1. Cos'è il Web 2.0

AJAX e altre applicazioni di Javascript. Luca Fabbri

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

Introduzione ad AJAX

Corso di Informatica Modulo T3 B1 Programmazione web

19. LA PROGRAMMAZIONE LATO SERVER

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

Corso di Applicazioni Telematiche

INTRODUZIONE AI PRINCIPI DELLO SVILUPPO DI APPLICAZIONI WEB INTERATTIVE

DOM (Document Object Model) manipolato attraverso un linguaggio ECMAScript come JavaScript o JScript per mostrare le informazioni ed interagirvi;

Ajax. Introdotta da Microsoft nel 1998 è stata standardizzata e adottata da tutti i browser moderni.

Il Web-Service SDMX dell ISTAT

Database e reti. Piero Gallo Pasquale Sirsi

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Implementazione di MVC. Gabriele Pellegrinetti

sito web sito Internet

Esercizi di JavaScript

Flavio De Paoli

Il Protocollo HTTP e la programmazione di estensioni Web

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

Ajax è il nome nuovo introdotto dal web 2.0, ma non si tratta di un nuovo linguaggio di. Javascript and XML

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

I MODULI Q.A.T. PANORAMICA. La soluzione modulare di gestione del Sistema Qualità Aziendale

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Scaletta. Estensioni UML per il Web. Applicazioni web - 2. Applicazioni web. WAE: Web Application Extension for UML. «Client page»

Indice PARTE PRIMA L INIZIO 1

Come funziona internet

Application Server per sviluppare applicazioni Java Enterprise

Installazione & Configurazione Php e MySQL su Mac Os X. Php

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

OSSIF WEB. Manuale query builder

A destra è delimitata dalla barra di scorrimento verticale, mentre in basso troviamo una riga complessa.

Corso basi di dati Introduzione alle ASP

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

La tecnica AJAX. Progettazione di Sistemi Interattivi. Implementazione di sistemi interattivi web-based (seconda parte) Esempio: Google Maps

Il Web-Service SDMX dell ISTAT

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Capitolo 4 Pianificazione e Sviluppo di Web Part

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8

MANUALE PORTALE UTENTE IMPRENDITORE

Tale attività non è descritta in questa dispensa

Obiettivo dell esercitazione

File, Modifica, Visualizza, Strumenti, Messaggio

Guida rapida all uso di Moodle per gli studenti

Progettazione Web Applicazioni client-server

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Progetto di Ingegneria del Software 2. SWIMv2

Manuali.net. Nevio Martini

Lezione 1 Introduzione

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

MANUALE D USO DELLA PIATTAFORMA ITCMS

Client - Server. Client Web: il BROWSER

Esercitazione 8. Basi di dati e web

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at] .

Corso di PHP. Prerequisiti. 1 - Introduzione

Standard Nazionale di Comunicazione Mercato Gas

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

FTP. studioand CORTILE DEL MAGLIO. manuale per la configurazione dell accesso FTP. Via Andreis, 18/ Torino (To)

Le query di raggruppamento

ELENCO CLIENTI FORNITORI Patch1

1) GESTIONE DELLE POSTAZIONI REMOTE

IFInet Secure Webmail

Web Programming Specifiche dei progetti

b) Dinamicità delle pagine e interattività d) Separazione del contenuto dalla forma di visualizzazione

Registratori di Cassa

Il software di gestione immobiliare più facile da usare. Modulo Web v5.2.

Integrazione InfiniteCRM - MailUp

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

POSTECERT POST CERTIFICATA GUIDA ALL USO DELLA WEBMAIL

Estensioni e modelli. Ancora poco conosciuti, consentono di estendere la suite per l ufficio. Ecco come servirsene

Corso di Informatica Modulo T3 B2 - Database in rete

Esercitazione n. 10: HTML e primo sito web

Una piattaforma per creare blog, che utilizza il linguaggio PHP e si

A T I C _W E B G U I D A AL L A N A V I G A Z I O N E S U L S I T O D E L G R U P P O. Rev. 2.1

MagiCum S.r.l. Progetto Inno-School

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

I M P O S T A R E U N A C C O U N T D I P O S T A C O N M O Z I L L A T H U N D E R B I R D

Servizio Feed RSS del sito CNIT

Installazione MS SQL Express e utilizzo con progetti PHMI

Navigare in Internet Laboratorio di approfondimento la creazione di siti web e/o blog. Marco Torciani. (Quinta lezione) Unitre Pavia a.a.

XML e PHP. Gestire XML con PHP. Appendice

Java Server Pages (JSP) JSP o Servlet? Java Server Pages (JSP) Java Server Pages Costituiscono un estensione della tecnologia delle servlet

GateManager. 1 Indice. tecnico@gate-manager.it

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Gara con presentazione di offerta valutata secondo il criterio dell offerta economicamente più vantaggiosa (gara in due tempi)

AJAX. Riccardo Rosati

Dopo Natale puoi... Matteo Zignani. 20 dicembre 2013

Configurazione di Outlook Express

Dott.ssa Maria Vittoria Avolio. Dott.ssa Adriana Pietramala

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Transcript:

Sviluppare applicazioni Web 2.0 con Ajax Maurizio Cozzetto 11 Agosto 2009 Ajax Definizione Il termine Ajax è apparso la prima volta su Internet il 18 febbraio 2005 nell articolo Ajax: A New Approach to Web Applications (http://adaptivepath.com/ideas/essays/archives/000385.php) scritto da da Jesse James Garrett, fondatore di Adaptive Path (http://adaptivepath.com) (fig. 1). Garrett nel suo articolo scrive: Ajax isn t a technology. It s really several technologies, each flourishing in its own right, coming together in powerful new ways. Ajax incorporates: standards-based presentation using XHTML and CSS; dynamic display and interaction using the Document Object Model; data interchange and manipulation using XML and XSLT; asynchronous data retrieval using XMLHttpRequest; and JavaScript binding everything together. Traduzione: Ajax non è una tecnologia. prospettive. Ajax incorpora a se: E l insieme di più tecnologie indipendenti che insieme danno vita a potenti presentazione standard utilizzando XHTML e CSS; layout dinamico con possibilità di interazione mediante il Document Object Model; scambio e manipolazione dati mediante l utilizzo di XML e XSLT; recupero asincrono dei dati utilizzando XMLHttpRequest; ed infine Javascript che amalgama il tutto. Il nome Ajax (che si dovrebbe scrivere AJAX ), acronimo di Asynchronous JavaScript And XML rappresenta un modo moderno e avanzato di scrivere applicazioni web ed è usato in molte applicazioni di grande successo, come Google Suggest, Google Maps, Google Mail, Flickr, Meebo ecc (quelle che nel linguaggio comune vengono definite come applicazioni Web 2.0). Recentemente, come alternativa a XML e XSLT, comincia ad essere molto usato anche JSON (JavaScript Object Notation), un sottoinsieme di Javascript basato sullo standard ECMA 262. Sono basati su Ajax molti framework lato client come Dojo, Prototype, Scriptaculous, jquery, mootools, YUI (The Yahoo! User Interface Library) ecc e framework client-server come JSF (JavaServer Faces), ICEFaces e RichFaces Liberamente adattato da Wikipedia (http://it.wikipedia.org/wiki/ajax), da Ajax Tutorial (http://www.w3schools.com/ajax/default.asp), dall articolo di Alessandro Lacava Sviluppare un framework Ajax (ioprogrammo, agosto 2009, n. 141) e dal libro di Ivan Venuti Programmare con Javascript, dalle basi ad Ajax, edizioni FAG Milano 1

Figura 1: La pagina web relativa all articolo scritto da Jesse James Garrett (basati su JSF) oppure DWR (Direct Web Remoting) e GWT (Google Web Toolkit) non basati su JSF ecc. Ajax tuttavia non è esente da difetti (ricordiamo il problema del bookmarking e il problema del bottone back) e la scrittura di un applicazione Ajax richiede alcuni accorgimenti. Le applicazioni oggi Fondamentalmente abbiamo tre scelte di base quando scriviamo applicazioni: Applicazioni desktop Applicazioni web Rich Internet Application (RIA) Applicazioni desktop Sono le usuali applicazioni, richiedono un CD di installazione (o una connessione a Internet per il download) e si installano completamente sul computer, sono molto veloci e hanno interfacce grafiche a volte anche molto complesse e ricche. Applicazioni web Non necessitano di alcuna installazione, girano in un browser web (di solito già installato sul pc dell utente), forniscono servizi impensabili in una applicazione desktop tradizionale (come i servizi forniti da Amazon, ebay ecc), ma richiedono lunghi tempi di attesa della risposta del server o del refresh o della generazione di una pagina web. Rich Internet Application Ajax tenta di colmare il gap tra applicazioni tradizionali e applicazioni web, consentendo lo sviluppo delle cosiddette cosiddette RIA (Rich Internet Application), migliorando l esperienza dell utente e garantendo maggiore interattività, velocità ed usabilità. Una RIA basata su Ajax è un applicazione dinamica e interattiva che gira in un browser, non 2

Figura 2: Modello classico e modello Ajax a confronto richiede plug-in, mantiene tempi di caricamento accettabili, è leggera e mantiene l indipendenza dalla piattaforma. Ajax non è tuttavia l unica tecnologia con queste prerogative: altre tecnologie nate prima di Ajax sono le Applet Java, JavaFX, Java WebStart, le ActiveX e Silverlight di Microsoft, Air, Flash e Flex di Adobe, Apollo, OpenLaszlo, XUL, XAML, SVG ecc. Tecnologie non basate su Ajax come Flash, le Applet ecc possono richiedere il download dei corrispondenti plug-in. Modello classico Il modello classico (fig. 2, parte di sinistra) funziona in questo modo: il cliente inoltra una richiesta (in genere una pagina web, statica o dinamica) al server web (un server web è un applicativo - per esempio Apache - in ascolto su una porta, di solito la porta 80). Se la pagina esiste ed è statica viene copiata e inoltrata al client. Se la pagina è dinamica, il motore di scripting lato server provvede a generare la sua parte di contenuto e a unirlo al codice HTML già disponibile e poi comunque la inoltra al client. Il modello classico soffre tuttavia di un grave difetto: se l utente interagisce ancora col client (per esempio cliccando su un link) viene inoltrata al server una nuova richiesta e le parti della pagina, quali i menu, i riquadri di testo e le immagini, che sono gli stessi della pagina precedente (magari generati dinamicamente) vanno di nuovo riprocessati e ricaricati. Questo comporta uno spreco di banda e allunga i tempi di caricamento, come si può immaginare. Modello Ajax Nel modello Ajax (fig. 2, parte di destra), le applicazioni, d altra parte, possono inviare richieste al web server per ottenere solo i dati che sono necessari grazie alla possibilità di effettuare chiamate asincrone. Come risultato si ottengono applicazioni più veloci dato che la quantità di dati interscambiati si riduce come si riduce anche il tempo di elaborazione da parte del server web visto che molti dati sono stati già inoltrati ed elaborati (fig. 3). 3

Figura 3: Modello sincrono e modello asincrono a confronto Primo esempio Un esempio concreto: consideriamo un elenco (ordinato per codice) di articoli di un sito di e-commerce. Se vogliamo ordinare l elenco per descrizione, con un applicazione web tradizionale, l utente potrebbe cliccare su un link in corrispondenza dell intestazione di una colonna di una tabella. Questa azione allora causerebbe l invio di una nuova query SQL al server di database il quale provvederebbe a ordinare i dati e a rimandarli al server web. Il server web successivamente potrebbe ricostruire da zero la pagina web inoltrandola integralmente all utente. Usando le tecnologie Ajax, questo evento invece potrebbe preferibilmente essere eseguito con un JavaScript lato client che produrrebbe dinamicamente l ordinamento richiesto (mediante DHTML). Secondo esempio Un altro esempio potrebbe essere la scelta del nickname in fase di creazione di un account su un sito web. Nel modello classico, dovremmo compilare prima tutto il modulo e inviarlo al server. Ci accorgiamo, solo dopo aver atteso il caricamento della pagina di conferma, che il nome è già esistente e che dobbiamo cambiarlo. Con Ajax invece può essere introdotto un controllo sull evento onchange o addirittura onkeyup della casella di testo che ci può informare tempestivamente che il nome inserito non è valido, magari evidenziando il testo in rosso (mediante CSS e Javascript). 4

1 // Contenuto d e l f i l e a j a x. j s 2 3 // v a r i a b i l e g l o b a l e 4 v a r xmlhttp 5 6 f u n c t i o n getxmlhttpobject ( ) { 7 // v a r i a b i l e l o c a l e 8 v a r xhr ; 9 10 i f ( window. XMLHttpRequest ) { 11 // c o m p a t i b i l i t à con IE7 +, F i r e f o x, Chrome, Opera, S a f a r i 12 t r y { 13 // t e n t o d i i s t a n z i a r e l o g g e t t o 14 x h r = new XMLHttpRequest ( ) ; 15 r e t u r n xhr ; 16 } catch ( e ) { 17 xhr = n u l l ; 18 } 19 } // f i n e i f 20 21 i f ( window. A c t i v e X O b j e c t ) { 22 // c o m p a t i b i l i t à con IE6, IE5 23 t r y { 24 // i n q u e s t o caso s i t r a t t a d i un ActiveX 25 xhr = new A c t i v e X O b j e c t ( M i c r o s o f t.xmlhttp ) ; 26 r e t u r n xhr ; 27 } catch ( e ) { 28 xhr = n u l l ; 29 } 30 } // f i n e i f 31 32 r e t u r n xhr ; 33 } Figura 4: File ajax.js (applicativo AjaxSuggestPhpApp) L oggetto XMLHttpRequest (Javascript) Alla base della tecnologia Ajax, vi è sempre un oggetto di classe XMLHttpRequest. In tutti i moderni browser, infatti la classe (o l oggetto) XMLHttpRequest (in Javascript, i termini oggetto e classe sono sinonimi) è implementata all interno dell oggetto window di Javascript e una delle sue peculiarità è che essa è in grado di effettuare chiamate http (di tipo sincrono o asincrono). Nella versione di IE7 (e succ.), in Firefox, in Opera ecc, tale oggetto è nativo, mentre nelle versioni precedenti di IE, l oggetto invece è implementato tramite un ActiveX. Predisponiamo allora una funzione Javascript (getxmlhttpobject()), da includere in tutti i nostri progetti Ajax (file ajax.js, fig. 4) per differenziare i due casi. La funzione javascript getxmlhttpobject() provvederà quindi, a seconda del browser, a istanziare un oggetto di classe XMLHttpRequest (riga 14) o un oggetto ActiveX (riga 2 5), mentre la variabile globale xmlhttp riceverà il valore della chiamata alla funzione. Proprietà dell oggetto XMLHttpRequest La proprietà readystate Dopo la sua creazione, l oggetto XMLHttpRequest può trovarsi in 5 stati distinti, individuati dalla proprietà readystate, illustrati nella Tabella 1. 5

Valore di readystate Descrizione 0 uninitialized. L oggetto XHR è stato creato ma il metodo open() non è stato ancora chiamato. 1 loading. Il metodo send() non è stato ancora chiamato. 2 loaded. Il metodo send() è stato chiamato, ma la risposta non è ancora disponibile 3 interactive. La risposta è in caricamento e la proprietà responsetext contiene dati parziali. 4 completed. La risposta è stata caricata e la richiesta è completa. Tabella 1: I 5 stati dell oggetto XMLHttpRequest (per brevità XHR) La proprietà onreadystatechange Quando il valore della proprietà readystate cambia, il motore Ajax richiama un event listener, ossia una funzione di callback invocata a ogni cambio di stato, che è nostro compito scrivere. La proprietà responsetext Questa proprietà contiene la risposta testuale del server nel caso in cui readystate valga 3 o 4. Nel primo caso, il response è incompleto ma ci sarà. Per valori diversi, responsetext sarà la stringa nulla. La proprietà responsexml La proprietà responsexml contiene un oggetto di tipo Document se e solo se si verificano le seguenti condizioni: il server risponde con un apposito Content-Type nell header; il valore di readystate è 4; il response è un documento XML su cui si può effettuare il parsing (ossia è un documento well-formed ecc). Le proprietà status e statustext Le proprietà status e statustext rappresentano rispettivamente il codice e la descrizione del response HTTP del server. Ad esempio, status vale 200 per un response che indica un successo (ooviamente per valori di readystate pari a 3 o 4). Per valori minori di 3, è sollevata un eccezione. Metodi dell oggetto XMLHttpRequest Metodo open Il metodo open() dispone dei seguenti parametri: method, url, sync, username e password. Gli unici parametri obbligatori sono method e url. Il primo parametro rappresenta il metodo da usare per la richiesta: quelli disponibili sono i classici metodi HTTP GET, POST, PUT, DELETE o HEAD. Di solito si usano GET e POST. Il secondo parametro (url) invece è la URL a cui postare la richiesta, di solito una pagina web dinamica (uno script Php, una servlet, una pagina ASP.NET, una JSP ecc ma volendo anche una pagina statica HTML o un file di testo). Il terzo parametro sync vale true o false nel caso rispettivamente di una richiesta asincrona o sincrona (per noi ovviamente saranno più interessanti le richieste asincrone). I parametri username e password si possono usare nel caso in cui il server richieda un autenticazione. Metodo setrequestheader Questo metodo è richiamato solo dopo l invocazione di una open(). setrequestheader dispone di due parametri, header e value. Essi sono due valori stringa e rappresentano la coppia chiave/valore relativa a un determinato header. 6

Metodo send Invia la richiesta vera e propria al server. Ha un solo parametro (data) che è una stringa in formato querystring in caso di richiesta di tipo POST, null in caso di richiesta di tipo GET. Metodo getresponseheader Quando readystate vale 3 o 4, è possibile usare il metodo getresponseheader() seguito dal parametro header di cui si vuole recuperare il valore. Per valori di readystate differenti, restituisce una stringa vuota. Metodo getallresponseheaders Il metodo getallresponseheaders() restituisce una singola stringa costituita da diverse righe, dove ogni riga rappresenta un header differente. Il formato è header1:valore1 header2:valore2... Per esempio: Server:Apache/1.3.31(Unix) Keep-Alive:timeout=15, max=99... Metodo abort Provvede a killare la richiesta pendente, se esiste, e riporta l oggetto XMLHttpRequest allo stato iniziale (readystate=0). Gli applicativi proposti Presenteremo dapprima il miniapplicativo AjaxSuggestPhpApp in Ajax e Php che simula il comportamento di Google Suggest e successivamente il miniapplicativo AjaxAutocompleterPhpApp2 che fa uso del framework Scriptaculous (http://script.aculo.us). Dal momento che Ajax è indipendente dal linguaggio di scripting lato server utilizzato, al posto di Php, avremmo potuto scegliere qualsiasi altro linguaggio lato server (come Asp, Asp.NET, Perl, Python, Jsp ecc). AjaxSuggestPhpApp L applicativo AjaxSuggestPhpApp è composto dai seguenti file: ajax.js e clienthint.js (due file Javascript), la pagina index.html (un form) e la pagina dinamica hint.php. Il file clienthint.js Il file clienthint.js (fig. 7) contiene le due funzioni javascript showhint() e statechanged(). La funzione showhint() riceve in ingresso il parametro str che rappresenta la stringa inserita dall utente nel form (riga 1), provvede a creare l oggetto XMLHttpRequest (memorizzandolo nella variabile globale xmlhttp, riga 5), sempre che questo sia possibile, e prepara la url da inviare al server (righe 10-11). La url comprende il riferimento alla pagina dinamica hint.php e alla querystring costituita dal parametro q seguito dal valore della variabile str e dal parametro sid seguito da un valore casuale (riga 15). Provvediamo poi a registrare la funzione di callback da usare quando il server restituisce il response completo (riga 19). Successivamente apriamo la connessione (riga 22) specificando una richiesta asincrona (valore true del terzo parametro) e inoltriamo la richiesta (riga 25). La funzione di callback statechanged() visualizzerà la risposta solo in caso di response completo (riga 33). 7

Figura 5: I suggerimenti forniti dal servizio Google Suggest Figura 6: Il nostro miniapplicativo AjaxSuggestPhpApp in esecuzione nel nostro browser (Firefox) 8

1 f u n c t i o n showhint ( s t r ) { 2... 3 4 // c r e a l o g g e t t o XHR e l o memorizza n e l l a v a r i a b i l e g l o b a l e xmlhttp 5 xmlhttp=getxmlhttpobject ( ) ; 6 7... 8 9 // c r e o l a u r l 10 v a r u r l= h i n t. php ; 11 u r l=u r l+?q= +s t r ; 12 13 // a g g i u n g e i n coda a l l a u r l un v a l o r e c a u s a l e p e r i m p e d i r e 14 // a l s e r v e r d i u s a r e l a cache 15 u r l=u r l+ &s i d= +Math. random ( ) ; 16 17 // r e g i s t r a z i o n e d e l l a f u n z i o n e j a v a s c r i p t d i c a l l b a c k 18 // quando i l s e r v e r r e s t i t u i s c e i l r e s p o n s e completo 19 xmlhttp. o n r e a d y s t a t e c h a n g e=statechanged ; 20 21 // apro l a c o n n e s s i o n e 22 xmlhttp. open ( GET, u r l, true ) ; 23 24 // i n o l t r o l a r i c h i e s t a 25 xmlhttp. send ( n u l l ) ; 26 27 } // f i n e d e l l a f u n z i o n e showhint 28 29 f u n c t i o n statechanged ( ) { 30 // s e l a r i s p o s t a è completa 31 i f ( xmlhttp. r e a d y S t a t e ==4) { 32 // v i s u a l i z z a l a r i s p o s t a n e l d i v t x t H i n t 33 document. getelementbyid ( t x t H i n t ). innerhtml = xmlhttp. r e s p o n s e T e x t ; 34 } 35 } // f i n e d e l l a f u n z i o n e statechanged Figura 7: Il file clienthint.js (applicativo AjaxSuggestPhpApp) 9

1 <html> 2 <head> 3 < t i t l e>ajax Suggest</ t i t l e> 4 <s c r i p t s r c= j a v a s c r i p t / a j a x. j s ></ s c r i p t> 5 <s c r i p t s r c= j a v a s c r i p t / c l i e n t H i n t. j s ></ s c r i p t> 6 </ head> 7 <body> 8 <form> 9 <l a b e l>nome : </ l a b e l> 10 <input type= t e x t i d= txtnome onkeyup= showhint ( t h i s. v a l u e ) /> 11 <input type= button value= I n v i a > 12 </ form> 13 <d i v i d= t x t H i n t >S u g g e r i m e n t i :</ d i v> 14 </ body> 15 </ html> Figura 8: Il file index.html Il file index.html Il file index.html (fig. 8) è costituito da un form HTML e da un blocco div. Viene richiamata la funzione showhint() nel momento in cui l utente digita un carattere (evento onkeyup). Il file hint.php Riportiamo il codice nella fig. 9 senza aggiungere ulteriori commenti, essendo il codice già sufficientemente commentato. AjaxAutocompleterPhpApp2 (Scriptaculous) Innanzitutto è necessario scaricare le librerie Javascript che costituiscono il framework Scriptaculous (si tratta di diversi file che hanno delle dipendenze reciproche per cui consigliamo per semplicità di scaricarli tutti e di includerli nel progetto in un apposita cartella, ad esempio javascript). L applicativo consisterà di due file: il primo, il file index.html (fig. 10), contiene il form di inserimento dati e il secondo, il file hint.php (fig. 11), provvede a recuperare le informazioni dalla base di dati sul server (in realtà non usiamo un vero e proprio database, per semplicità). Il file index.html Il file index.html deve contenere l inclusione delle librerie del framework (righe 6-7), pena il non funzionamento dell applicativo. Nel file index.html, predisponiamo la casella di input per l utente (riga 12) e istanziamo un oggetto di tipo Autocompleter (riga 19). Il costruttore è seguito da diversi parametri: il primo è il nome della casella testuale, il secondo è il nome del blocco nel quale vogliamo visualizzare i risultati (formattato opportunamente con uno stile apposito), il terzo è il file php da richiamare sul server e il quarto fa riferimento alla querystring contenente il nome della casella di input. Il file hint.php Il file hint.php esegue l elaborazione lato server sul database dei nomi sfruttando la funzione php ereg() che permette tra le altre cose di controllare se una stringa è presente all interno di un altra stringa (riga 14). L output deve essere restituito in forma di lista non ordinata. 10

1 <?php 2 // r i e m p i e l a r r a y a con d e i nomi 3 $a []= Anna ; 4 $a []= B r i t t a n y ; 5 $a []= C i n d e r e l l a ; 6... 7 8 // o t t i e n e i l v a l o r e d i q 9 $q=$ GET [ q ] ; 10 11... 12 13 // c e r c a t u t t i i s u g g e r i m e n t i n e l l a r r a y a 14 i f ( s t r l e n ( $q ) > 0) { 15 $ h i n t=n u l l ; 16 f o r ( $ i =0; $i <count ( $a ) ; $ i++) { 17 // c o n f r o n t a l e i n i z i a l i d e i nomi 18 // dopo a v e r l e c o n v e r t i t e i n m i n u s c o l o 19 i f ( s t r t o l o w e r ( $q)==s t r t o l o w e r ( s u b s t r ( $a [ $ i ], 0, s t r l e n ( $q ) ) ) ) { 20 i f ( s t r l e n ( $ h i n t )==0) { 21 $ h i n t=$a [ $ i ] ; 22 } e l s e { 23 $ h i n t=$ h i n t.,. $a [ $ i ] ; 24 } // f i n e i f i n t e r n a 25 } // f i n e i f e s t e r n a 26 } // f i n e f o r 27 } // f i n e i f e s t e r n a 28 29 // Se non v i sono s u g g e r i m e n t i, imposta un s e m p l i c e t e s t o 30 // a l t r i m e n t i imposta i l s u g g e r i m e n t o c o r r e t t o 31 i f ( s t r l e n ( $ h i n t ) == 0){ 32 $ r e s p o n s e= Nessun s u g g e r i m e n t o ; 33 } e l s e { 34 $ r e s p o n s e=$ h i n t ; 35 } 36 37 // manda i n output l a r i s p o s t a 38 echo S u g g e r i m e n t i :. $ r e s p o n s e ; 39?> Figura 9: Il file hint.php (applicativo AjaxSuggestPhpApp) 11

1 <!DOCTYPE HTML PUBLIC //W3C//DTD HTML 4. 0 1 T r a n s i t i o n a l //EN > 2 <html>7 3 <head> 4 <meta http e q u i v= Content Type content= t e x t / html ; c h a r s e t=utf 8 > 5 < t i t l e>autocompleter t e s t</ t i t l e> 6 <s c r i p t s r c= j a v a s c r i p t / p r o t o t y p e. j s type= t e x t / j a v a s c r i p t ></ s c r i p t> 7 <s c r i p t s r c= j a v a s c r i p t / s c r i p t a c u l o u s. j s type= t e x t / j a v a s c r i p t ></ s c r i p t> 8 </ head> 9 <body> 10 <form a c t i o n=. > 11 <l a b e l>nome :</ l a b e l> 12 <input type= t e x t i d= txtnome name= txtnome value= /> 13 <input type= button i d= b t n I n v i a name= b t n I n v i a value= I n v i a /> 14 </ form> 15 16 <d i v i d= t x t H i n t ></ d i v> 17 18 <s c r i p t type= t e x t / j a v a s c r i p t > 19 new Ajax. Autocompleter ( 20 txtnome, t x t H i n t, h i n t. php, { paramname : txtnome } 21 ) ; 22 </ s c r i p t> 23 </ body> 24 </ html> Figura 10: Il file index.html (applicativo AjaxAutocompleterPhpApp2) 1 <?php 2 $a=a r r a y ( ) ; 3 // q u e s t e i n f o r m a z i o n i possono e s s e r e p r e l e v a t e da un d a t a b a s e 4 $a []= Anna ; 5 $a []= B r i t t a n y ; 6 $a []= C i n d e r e l l a ; 7... 8 9 $q=$ POST [ txtnome ] ; 10 11 echo ( <ul > ) ; 12 i f ( s t r l e n ( $q )!=0) { 13 f o r ( $ i =0; $i <count ( $a ) ; $ i++) { 14 i f ( ereg ( $q, $a [ $ i ] ) ) echo ( < l i >. $a [ $ i ]. </ l i > ) ; 15 } // f i n e f o r 16 } // f i n e i f 17 18 echo ( </ul > ) ; 19?> Figura 11: Il file hint.php (applicativo AjaxAutocompleterPhpApp2) 12

Figura 12: L applicativo AjaxAutocompleterPhpApp2 in esecuzione nel browser Firefox 13