Come creare applicazioni interattive con Ajax

Ajax è una tecnica di programmazione che consente lo sviluppo di RIA (Rich Internet Application).
Le RIA sono applicazioni web caratterizzate da grande interattività e velocità di esecuzione.
L’elaborazione dei dati avviene a livello client (browser) e le chiamate al server avvengono in “background” in modo asincrono (Ajax sta per Asynchronous JavaScript and XML).

Cosa significa in parole povere che lo scambio dati tra client e server avviene in background?

Vuol dire che lo scambio dati tra client e server permette l’aggiornamento dinamico della pagina web senza che quest’ultima venga ricaricata e senza dover richiamare una nuova pagina ma, soprattutto, è da sottolineare che non bisogna attendere che sia stata ultimata la richiesta per poterne effettuare altre.

Ajax non è un linguaggio di programmazione ma un insieme di tecnologie, vediamo quali sono:

Creare delle applicazioni interattive con Ajax

di Emanuele Calì

ajax

Tornando a parlare delle varie tecnologie di cui Ajax è composto ecco quali sono:

  1. HTML/XHTML/CSS per il markup;
  2. DOM (Document Object Model) manipolato attraverso un linguaggio ECMAScript come JavaScript;
  3. XMLHttpRequest per lo scambio asincrono dei dati tra client e server;
  4. XML come formato per lo scambio dati. Non è obbligatorio e al suo posto si può scegliere un altro formato come JSON o anche semplice testo.

Le applicazioni web che fanno uso di Ajax necessitano di browser di ultima generazione che supportino tale tecnologia.

Tutti i principali browser come FireFox, Internet Explorer, Google Chrome, Opera e Safari supportano Ajax ma è buona norma testare i propri applicativi per verificare la compatibilità.

Abbiamo detto che le chiamate Ajax avvengono in background e, ottenuta la risposta, viene modificata solo una porzione della pagina (di solito un elemento HTML come il DIV).
Questo potrebbe anche rappresentare un problema per l’utente che, una volta effettuata la chiamata, vede la pagina web “immobile” ignaro che la richiesta di informazioni è comunque stata inviata al server.

Per ovviare a questo problema è opportuno dedicare un elemento della pagina (un div è sicuramente indicato) alla descrizione dell’interazione. Questo si può realizzare con un semplice testo o con un loader (magari una GIF come quelle scaricabili da ajaxload.info) che “visivamente” mostra all’utente che è in corso uno scambio dati.

Vediamo tecnicamente come possiamo modificare dinamicamente il contenuto di una pagina web tramite il metodo innerHTML del DOM.

Supponiamo che nella nostra pagina web ci sia un div con ID univoco “content”:

<div id=”content”>
Mio div
</div>

Possiamo modificare il contenuto del div utilizzando la seguente funzione:

function modifica() {
document.getElementById(“content”).innerHTML =
“Contenuto del div modificato”;
}

Richiamiamo la funzione tramite un button:

<input type=”button”
value=”Modifica” onclick=”javascript:modifica()” />

Modificando dinamicamente lo stile del div possiamo inventarci una funzione che mostri o nasconda il suo contenuto:

function hideshow() { 

var element = document.getElementById("content");

if (element.style.visibility == 'hidden') {

element.style.visibility = 'visible';

element.style.display = 'block';

} else {

element.style.visibility = 'hidden';

element.style.display = 'none';

}

}

Richiamiamo la funzione con un altro button:

<input type="button" value="Hide/Show"
onclick="javascript:hideshow()" />

Adesso vediamo come realizzare una interazione “avanzata” inviando una richiesta ad una pagina server-side (nel nostro esempio scritta in PHP) ed ottenendo una risposta in formato testo.

Vediamo prima la pagina PHP (file.php):

<?php

$utente = $_GET['utente'];

if ($utente=="rossi") echo "Salve sig. Rossi";

else echo "Non ti conosco";

?>

La pagina riceve una variabile “utente” in modalità GET e controlla che il suo contenuto sia “rossi”. In caso affermativo stampa la frase “Salve sig. Rossi” altrimenti la frase “Non ti conosco”. La risposta verrà inserita nel div con ID univoco “content” tramite Ajax:

var ajax = initAjax();

if (ajax) {

ajax.open("get", "file.php?utente=" + utente, true);

ajax.setRequestHeader("connection", "close");

ajax.onreadystatechange = function() {

var response="";

if (ajax.readyState == 0) response =
"Inizializzazione in corso..."; 

if (ajax.readyState == 1) response =
"content","Connessione avviata...";

if (ajax.readyState == 2) response =
"content","Invio dati in corso..."; 

if (ajax.readyState == 3) response =
"content","Ricezione dati in corso..."; 

if (ajax.readyState == 4 && ajax.status==200) {

response = ajax.responseText;

} 

else response =
"Operazione fallita! Errore numero " + ajax.status;

document.getElementById("content").innerHTML = response;

} 

ajax.send(null);

} 

else alert('Ajax non supportato!');

Dopo aver inizializzato l’oggetto Ajax (potete visionare il codice completo nei files a corredo dell’articolo) che, tra l’altro, ci permette di verificare che Ajax sia supportato dal browser, abbiamo effettuato la chiamata asincrona inviando il contenuto della variabile utente e ricevendo una risposta che abbiamo scelto di memorizzare nella variabile response.

Tutto questo servendoci del metodo Open (il cui terzo parametro impostato su true specifica che la chiamata è asincrona) e successivamente del metodo Send.

Niente di troppo complicato ma soffermiamoci un attimo sulla funzione onreadystatechange.

Questa funzione si preoccupa di controllare lo stato dell’interazione restituendo un numero intero (readyState) che identifica in ogni istante lo stato della richiesta.

Nel caso avessimo voluto effettuare la richiesta in POST avremmo dovuto modificare lo script nei metodi Open e Send e specificare tramite headers i valori da inviare.

ajax.open
("post", "file2.php", true);

ajax.setRequestHeader
("content-type", "application/x-www-form-urlencoded");

ajax.send
("utente=" + utente);

Richiamando il file PHP file2.php:

<?php

$utente = $_POST['utente'];

if ($utente=="rossi") echo "Salve sig. Rossi";

else echo "Non ti conosco";

?>

Se hai delle domande o curiosità lascia pure un commento ;)

Scarica i files dell’articolo

Articolo pubblicato per blographik da Emanuele Calì di EmaWebDesign.com.

Ti è piaciuto questo articolo?

Ricevi continui aggiornamenti su come migliorare il tuo blog:

Scegli di seguire i post e le chicche di blographik (esclusiva ai soli iscritti), direttamente nella tua casella email.

Abbonati ora alla newsletter compilando questo form.

Nome:
Email:
 
 

Articoli correlati:

Se di tuo interesse, puoi consultare anche i seguenti post correlati:

  • Pingback: Come creare applicazioni interattive con Ajax | EmaWebDesign :: Web Programming / Web Design

  • Luca

    Non ho capito cosa fà il codice? Memorizza il nome inserito “Rossi” dove?
    Grazie.

  • http://www.emawebdesign.com EmaWebDesign

    Ciao Luca,

    l’esempio a cui ti riferisci è il seguente:

    1) La pagina web, tramite Ajax, invia al file PHP con metodo GET (file.php) la variabile “utente”.

    2) il file PHP riceve la variabile e controlla il contenuto. Se contiene la parola “rossi” restituisce semplicemente la frase “Salve sig. rossi”. Altrimenti la frase “Non ti conosco”.

    Una semplice risposta in formato testo.

    Questa risposta del file PHP viene inserita, sempre da Ajax, nel DIV specificato che nell’esempio ha ID uguale a “content”.

    In parole povere, nel div della pagina web vedrai comparire questa risposta ricevuta dal file PHP.

    Puoi scaricare i files e verificarne il comportamento.

    • http://www.blographik.it Mirko D’Isidoro

      Grazie Emanuele per aver risposto in modo esaustivo a Luca ;)

  • Luca

    Grazie mille per la risposta. Scusa ancora per la mia ignoranza in materia ma se non ci fossa la parte in javascript AJAX, il file PHP farebbe la stessa cosa no? Cioè si otterrebbe lo stesso output anche solo con il file php, no?

  • http://www.emawebdesign.com EmaWebDesign

    Non devi scusarti nè tantomeno parlare d’ignoranza, la curiosità e/o la voglia di imparare qualcosa di nuovo è un pregio non un difetto ;)

    Il file PHP non è legato alla parte Ajax, nel senso che si preoccupa di controllare la variabile ricevuta in GET a prescindere da chi gliel’ha inviata.

    Se utilizzi soltanto il file PHP magari richiamandolo nel seguente modo:

    file.php?utente=rossi

    funziona perfettamente poichè l’unica parte “obbligatoria” (in quest’esempio ovviamente) è l’invio della variabile “utente” in modalità GET.

  • Pingback: Creare applicazioni interattive con Ajax | FaceitWeb.com

  • Alessandro

    Grazie Emanuele per il tuo esempio semplice, spiegato bene e sopprattuto …CHE FUNZIONA ! ! ! BRAVO !
    Sono 2 giorni che cerco qualcosa di simile , ne ho trovate di tutti i colori ma non funzionavano ed erano esempi lunghi 1 KM.
    Comunque volevo chiederti se ti era successo questo :
    Il file php che ho messo sul server lavora e fa quello che deve fare l’unico problema che ho è quando la funzione mi ha restituito il valore “utente” mi appare in basso a sx il famoso triangolino giallo di errore nella pagina , dicendomi : errore non specificato , qualcuno di voi sa a cosa è dovuto ?
    Ringranzio anticipatamente per le eventuali risposte , Ciao.

  • http://www.emawebdesign.com EmaWebDesign

    Ciao Alessandro,

    grazie per aver apprezzato l’articolo ;)

    per il tuo problema, per poterti rispondere, dovrei vedere il codice. Se non è troppo lungo puoi postarlo in un commento.

    In generale, posso consigliarti di controllare le cose che possono sembrare scontate e banali ma che a volte sfuggono.

    Per esempio controlla che la variabile utente non sia in conflitto con un ID univoco “utente” o cose del genere.

  • Pingback: EmaWebDesign goto 2010 | EmaWebDesign :: Web Programming / Web Design / SEO

  • http://motoreelettrico.blogspot.com/ Motore Asincrono

    molto interessante questo post