Non sei loggato | Register | Login

I primi passi con Ajax Aggiungi

Tutorials / Ajax

Introduzione

Questo tutorial ha il puro scopo di aprire le porte verso la costruzione di applicazioni dinamiche, veloci che sono alla base del Web 2.0, utilizzando Ajax (che si concretizza solitamente con l'utilizzo dell'oggetto XmlHttpRequest).
L'approccio che cercherò di utilizzare sarà il più semplice possibile in modo da far apprendere facilmente le basi che permetteranno poi al lettore di approfondire l'argomento leggendo le risorse che si trovano ormai ovunque su Internet.

Istanziamo l'oggetto XmlHttpRequest

Questo componente fu creato inizialmente dalla Microsoft (eh si dobbiamo ringraziarla :P) sottoforma di oggetto ActiveX per poi essere implementato (come oggetto nativo) pure da parte di Mozilla e Co.
Dobbiamo tenere conto di ciò nella fase di istanziazione dell'oggetto perchè il Javascript corrispondente per il browser Explorer sarà:

  1. var obj = new ActiveXObject("Microsoft.XMLHTTP");

mentre per ogni altro browser sarà:

  1. var obj = new XMLHttpRequest();

di conseguenza per permettere un'istanziazione "indipendente" dal browser basterà verificare l'esistenza dell'oggetto in questo modo:

  1. var obj;
  2. if (window.XMLHttpRequest) {
  3.         obj = new XMLHttpRequest();
  4. } else if (window.ActiveXObject) {
  5.         obj = new ActiveXObject("Microsoft.XMLHTTP");
  6. }

In realtà esistono altri script simili (più lunghi) che tengono conto delle varie implementazioni dei vari browsers web, ma la minestra è la stessa ;)

Analizziamo l'oggetto XmlHttpRequest

Una volta creato l'oggetto di riferimento abbiamo a disposizione una discreta quantità di metodi che elenco qui sotto:

  • abort(): Non fa altro che bloccare la richiesta corrente;
  • getAllResponseHeaders(): Ritorna il completo set degli headers come stringa (ad esempio il Cache-Control, ecc...);
  • getResponseHeader(<label>): Ritorna solo l'header corrispondente alla label;
  • open(<metodo>,url[,async[,<username>[,<password>]]])): Con questa funzione prepariamo la connessione indicando se utilizzare come metodo il POST, HEAD o GET ed impostando l'url con cui comunicheremo. Async ci permette di scegliere tra una comunicazione asincrona o meno (quindi decidere se l'utente deve aspettare che la comunicazione finisca per continuare ad interagire con la nostra applicazione); username e password servono per un'eventuale connessione sicura (non so fino a che punto sia sicura visto che username e password saranno visibili a chiunque legga il codice Javascript :P)
  • send(<contenuto>): Diamo il via alla nostra trasmissione dati :) Se facciamo un GET il contenuto è inutile (quindi o lo tralasciamo o lo settiamo come null) mentre per il POST dobbiamo riversare sul contenuto i dati da inviare (sottoforma di XML oppure URL Encoded)
  • setRequestHeader(<nome>,<valore>): Permette di modificare il valore ad un determinato header a nostra scelta (che verrà poi spedito mediante la nostra richiesta);

Eccovi un esempio di invio dati in GET:

  1. try {   
  2.         obj.open("GET", "http://dominio.com/script.php?var1=uno&var2=due", true);
  3.         obj.onreadystatechange = onStateChange;
  4.         obj.send(null);
  5. } catch (e) {
  6.         alert("Errore: "+e);
  7. }

Come potete notare le variabili e in generale i dati da inviare allo script vengono inclusi nell'indirizzo come ormai siamo abituati a fare da anni (utilizzando il GET); a questo punto dopo aver impostato la funzione di callback possiamo inviare i nostri dati passando alcun parametro al metodo send().

Nel caso di un POST le cose cambiano leggermente:

  1. try {   
  2.         obj.open("POST", "http://dominio.com/script.php", true);
  3.         obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  4.         obj.onreadystatechange = onStateChange;
  5.         obj.send("var1=uno&var2=due");
  6. } catch (e) {
  7.         alert("Errore: "+e);
  8. }

Per eseguire la comunicazione in POST abbiamo dovuto inserire le variabili come contenuto del metodo send() e aggiungere una nuova intestazione che dicesse allo script che gli stiamo passando dei dati nella forma URL Encoded (altrimenti non funziona).
Mmm ho capito, ma che cos'è quella funzione di callback?

La funzione di callback (per l'esattezza un EventListener)

Prima di entrare nel cuore del discorso esaminiamo le proprietà dell'oggetto XmlHttpRequest:

  • readyState: Indica lo stato della comunicazione ritornando i possibili seguenti valori:
    • 0: Valore iniziale (stato indefinito);
    • 1: Metodo open() chiamato con successo;
    • 2: Metodo send() eseguito, la richiesta è stata inviata;
    • 3: Trasferimento dati in corso;
    • 4: Trasferimento completato;
  • responseText: Ritorno dei dati ricevuti dal server sottoforma di stringa;
  • responseXML: Ritorno dei dati ricevuti dal server sottoforma di XML;
  • status: Ritorna il codice di stato http, nel caso in cui la comunicazione è avvenuta con successo avremo il codice "200";
  • statusText: Ritorna la descrizione relativa al codice di stato http attuale;

La proprietà che ci permette di gestire il trasferimento dei dati ed in generale i cambiamenti di stato è onreadystatechange.
Vediamone l'utilità con un esempio:

  1. function onStateChange() {      // Cambiamento Stato
  2.         if (obj.readyState == 4) { // Caricamento Avvenuto
  3.                 if (obj.status == 200) { // con successo
  4.                         // fai qualcosa
  5.                 } else {
  6.                         alert("Errore: "+obj.statusText);
  7.                 }
  8.         }       
  9. }

Negli esempi precedenti abbiamo indicato di chiamare ad ogni cambiamento di stato la funzione onStateChange che in questo caso ci permette di distinguere l'avvenuto caricamento da una situazione di errore.
Questo è l'utilizzo più comune del metodo ma le varie combinazioni di status e readyState ci permettono di poter gestire una miriade di casistiche.

Utilizziamo i dati ricevuti

Nell'esempio precedente ho messo un commento nel caso in cui la comunicazione sia avvenuta con successo ma è chiaro come in quella posizione debba andare il codice che cambia dinamicamente l'aspetto della pagina.
Un esempio è il seguente:

  1. document.getElementById("risultato").innerHTML=obj.responseText;

Con questa semplice riga di codice riversiamo i dati ricevuti nel tag corrispondente all'id "risultato".

Conclusione

Dopo questa breve panoramica generale ho deciso pure di condividere una semplice applicazione Ajax che non fa altro che affidare ad uno script lato server (PHP) la somma di 2 numeri di 4 cifre.

Screenshot dell'applicazione Ajax di esempio

Ora non vi resta che lavorare! :P

Daniele Simonin 23 June 2006 alle 14:33 Trackback URI

Scrivi un commento

Tags di formattazione:










* Sono ammessi solo commenti contenenti opinioni, correzioni e ogni forma di supporto al tutorial; è quindi vietato porre quesiti personali.

Leggi i 12 commenti

Complimenti!
Credo siano i tutorial più utili che mi sia capitato di vedere, perchè semplificano la comprensione. Per quel che vale hai un posto d'onore tra i miei feed :)

Commento di Federico 29 March 2007 alle 15:10

Grazie per questo interessante articolo!!
L'ho trovato molto utile, e finalmente riesco a farmi un'idea di Ajax :)

Salutoni.

Commento di Simone 21 October 2007 alle 15:14

Grazie, veramente utilissimo e ben fatto!

Commento di Patrizia 23 October 2007 alle 09:08

ottimo tutorial, e soprattutto fantastico AJAX.

Commento di Francesco 29 November 2007 alle 11:45

Grazie per il tutorial. Semplicemente quello che mi serviva.

Commento di Nicola 12 January 2008 alle 17:36

grazie mille!
semplice ed esaustivo!

d.

Commento di wow 28 January 2008 alle 13:21

[...] Sviluppo web con AJAX Pubblicato il Febbraio 28, 2008 di iboi AJAX, è una tecnica di sviluppo utilizzata per creare applicazioni web interattive. Questa tecnica riesce, a migliorare l’interattività, la velocità e l’usabilità di una pagina web. AJAX è una tecnica utilizzabile su molti sistemi operativi e browser web, ed esistono numerose implementazioni open source di librerie e framework. Ajax utilizza una combinazione di: HTML (o XHTML) e CSS per lo stile;DOM (Document Object Model) manipolato attraverso un linguaggio come JavaScript o JScript per mostrare le informazioni ed interagirvi; In genere viene usato XML come formato di scambio dei dati, anche se di fatto qualunque formato può essere utilizzato, incluso testo semplice, HTML preformattato. Per lo scambio di dati fra client e WebServer si utilizza principalmente l’oggetto XMLHttpRequest (inizialmente creato dalla Microsoft ) Una guida semplicissima per i primi passi in Ajax è questa… io l’ho trovata molto utile. Ora che avete capito un po’ meglio cosa è vi segnalo anche una ottima lista di tutorial fatta dal sito Smashing Magazine…Ci sono degli esempi fantastici, tutti ovviamente free… [...]

Pingback da Sviluppo web con AJAX « iboi’s blog 28 February 2008 alle 18:33

sei il mio mito , anzi no,
SEI IL MIO MITOOOOOOOOOOOOOO

Commento di Attilio 14 March 2008 alle 12:18

L'applicazione di esempio allegata all'articolo non funziona.

Ritorna"

Errore:[ object Error ]

"

Commento di Filippo 6 October 2008 alle 10:37

Probabilmente sarà una problematica legata al cross-browsing, all'epoca non mi ricordo con che browser testai il tutto.
Diciamo che il tutorial va oltre l'applicazione in se': ha lo scopo di capire il funzionamento di ajax.

PS: Ad ogni modo mi sembra strano che non vada visto che in qualche modo lo testai tempo fa, se hai qualche dettaglio in più ben venga.

Commento di Daniele Simonin 6 October 2008 alle 10:41

Avevo sbagliato la cartella della root del webserver (Tomcat 5.5)
L'ho corretta, ma ora al posto dell'errore precedente, non fa praticamente nulla.

Su IE7 scompare la casella del risultato
Su Firefox 3 compare una casella vuota.
E' possibile che il non abbia Php abilitato?

Commento di Filippo 6 October 2008 alle 12:56

E' probabile, prova in locale installando WAMP o qualsiasi altro server Web pronto.

Commento di Daniele Simonin 6 October 2008 alle 16:44

Feed

infoPillole (by Wikipedia)

Ultimi commenti

Calendario

March 2010
M T W T F S S
« Feb    
1234567
891011121314
15161718192021
22232425262728
293031  

Archivio

Categorie

Tutorials casuali

Ultime news

Progetti

Alcuni miei lettori

Have a break