Il fenomeno AJAX ha fatto tornare in auge la conoscenza di JavaScript, un linguaggio nato per applicazioni web lato client (la parte server non ha mai avuto molto successo), che per un lungo periodo di tempo sembrava essere ormai
superato dalle tecnologie
server-side. Dopo un
primo capitolo di introduzione storica, questo testo (per il quale è disponibile un
elenco di risorse, che non comprende il codice di esempio) prosegue con due capitoli di impostazione squisitamente didattica sull'uso del linguaggio; tanto didattica, che ognuno di essi termina con una serie di esercizi. Il
secondo capitolo introduce le nozioni fondamentali, dai tipi di dato alla nozione di variabile ai cicli e si fa apprezzare soprattutto per una serie di esempi
tricky, che
scavano in profondità nel
modus operandi di JavaScript.
Il
terzo capitolo è dedicato alla
programmazione ad oggetti in JavaScript;
Venuti illustra come è possibile simulare un comportamento
object-oriented tramite l'implementazione di oggetti e costruttori, la
proprietà prototype (utilizzata per l'ereditarietà e da non confondere con l'omonimo framework, esaminato più avanti) e la persistenza di variabili nel contesto di esecuzione con le
closure; vengono forniti solo dei riferimenti, invece, su come
simulare i modificatori di accesso o sui
problemi delle closure nella gestione della memoria. Il capitolo prosegue con una carrellata, abbastanza lunga, ma non certo esaustiva, degli oggetti predefiniti in JavaScript, ad esempio per gli array, le date, le stringhe o le
espressioni regolari. Il capitolo termina con qualche pagina dedicata a
JSON, naturalmente ripreso più avanti parlando di AJAX.
Il
quarto capitolo è dedicato all'uso
storico di JavaScript per l'interazione con gli elementi di una pagina web: il ben noto
Dynamic HTML, o DHTML. E' un capitolo che si concentra sull'uso del
Document Object Model (DOM), sulle differenze di implementazione fra i vari browser, sulla creazione e modifica di elementi della pagina (solitamente individuati tramite la
funzione GetElementById), sulle form e sulla gestione degli eventi e di immagini. Parte del capitolo ha funzione di miscellanea, illustrando alcuni tipici esempi d'uso; per il resto, il codice che accompagna le spiegazioni teoriche è sempre ben fatto, attento alle particolarità dell'argomento ed al riuso. Due paragrafi finali, molto brevi, accennano all'interazione con i
CSS da JavaScript ed alla creazione di
giochi in JavaScript.
Col
quinto capitolo inizia la parte dedicata ad AJAX: si comincia con le varie proprietà e metodi dell'
oggetto XMLHttpRequest, originariamente inventato da Microsoft; poiché ovviamente la vera
forza di AJAX è comunque nell'interazione con un web server, viene accennato a come crearne rapidamente uno con
WampServer. Assodata la complessità della materia, tutto il resto del capitolo è dedicato a due framework complementari - il secondo è un'estensione del primo - che semplificano molto, sia la scrittura di applicazioni che la compatibilità
cross-browser:
Prototype e
script.aculo.us. Se del primo vengono illustrati l'accesso agli elementi del
DOM, la gestione degli eventi, l'ereditarietà e l'
offerta specifica per AJAX, del secondo vengono presentati, con una serie di esempi, tutti i cinque moduli che lo compongono. Al solito, qualche paragrafo finale introduce argomenti più specifici: la validazione delle form (citando
JSValidate), l'accessibilità (in particolar modo il framework
Jast Egg) e la
sicurezza di AJAX.
Una delle applicazioni AJAX più note è sicuramente
Google Maps, oggetto del
sesto capitolo. Dopo aver specificato alcuni dei limiti delle API disponibili previa registrazione (quali l'impossibilità di usare per pagine HTML off line) ed il complesso modello di
licensing, l'autore ce ne dà una panoramica sufficientemente ampia per esempi, dall'inserimento della mappa vera e propria in un elemento
div all'aggiunta dei familiari controlli (ad esempio, per lo zoom); agli
overlay e ai
marker, alle finestre di informazione e alla
gestione degli eventi. Le
Google Maps API lavorano essenzialmente utilizzando, come parametri, la latitudine e longitudine di un punto; sarebbero, all'atto pratico, di poca utilità senza la classe
GClientGeocoder, che realizza la georeferenziazione, ovvero restituisce le coordinate dato un indirizzo. Viene brevemente illustrato anche l'uso del
Local Search Control per ricerche commerciali e (incredibile, ma vero!) di
AdSense.
Il
settimo capitolo, assai breve, parla del problema, assai sentito, del debug di codice JavaScript ed è incentrato sull'uso di
Firebug per il debug e l'editing in linea di pagine HTML; all'epoca della stesura, l'autore non conosceva probabilmente le capacità di debug di codice JavaScript offerte da
Visual Studio 2008. L'
ottavo ed ultimo capitolo presenta una serie di librerie avanzate, basate sui già citati
Prototype e
script.aculo.us, per la realizzazione di applicazioni di sicuro impatto visivo, oltre che di interesse accademico: si va dalla pagina personale di
Thomas Fuchs, la principale mente dietro
script.aculo.us, alla realizzazione di applicazioni che simulano un ambiente MDI come
Prototype UI, alle gallerie di immagini con
Lightbox, alla creazione di
tooltip avanzati con
CoolTips o
Prototip; senza dimenticare naturalmente la creazione di giochi in JavaScript. L'ultima parte del capitolo presenta un esempio di
mashup tra Google Maps e Google Spreadsheets, illustrando più la procedura ed i risultati che il codice, per la verità.