SlideShare a Scribd company logo
primi passi per iniziare

Quante volte in questi ultimi mesi abbiamo sentito parlare di AJAX?
Ho deciso di scrivere quest'articolo con l'intento di aiutare a sviluppare le prime
applicazioni AJAX a coloro che si vogliono avvicinare a questo "nuovo mondo"
ritenuto spesso essere una cosa per soli esperti.

Come premesso partiamo da zero cominciando col dire che AJAX è un acronimo e sta per
Asynchronous Javascript and XML.
AJAX non è un linguaggio di programmazione ma piuttosto la combinazione di più
tecnologie (HTML , XML, Javascript, CSS) per la realizzazione di applicazioni web più
veloci.
Il tradizionale modello web si basa sul paradigma request/response sincrono cioè il
browser fa una richiesta al web server e rimane in attesa della risposta fino alla risposta
da parte del web server che a seconda dei casi può impiegare più o meno tempo.
Mentre, come il nome stesso suggerisce, AJAX si basa su comunicazione asincrona cioè il
browser fatta la richiesta non si blocca aspettando la risposta ma permette all'utente di
continuare la navigazione aggiornando solo in seguito la pagina html con i dati restituiti
dal server.




                                        Figura. 1


Per comunicare con il server AJAX usa Javascript ed in particolare l'oggetto
XMLHttpRequest (XHR) ciò comporta che a differenza di una comunicazione web classica
ora abbiamo un livello in più lato client che viene chiamato motore AJAX (AJAX engine)
ed è proprio questo livello che permette di non dover ricaricare sempre la pagina ad ogni
richiesta ma soltanto quella parte che ci interessa. Il server può rispondere inviando i
dati in formato XML che vengono quindi processati utilizzando Javascript ma questo non
è strettamente necessario.
Figura. 2


Questo è ciò che avviene in sintesi ora vediamo un semplice esempio di utilizzo puramente
didattico di come le cose funzionino in pratica.
Come ultima cosa ricordo che AJAX lavora lato client e che quindi possiamo lavorare lato
server con il linguaggio che più ci aggrada (Java, PHP, .Net, etc).
Io utilizzerò in seguito PHP.

Let's go.
Immaginiamo di avere un form con due campi testo.
Vogliamo che il secondo campo, dopo ogni carattere digitato nella prima casella di testo,
si valorizzi con il testo reso maiuscolo del primo.
Perciò cominciamo con lo scrivere il form con i due campi testo.

<form>
  Input text: <input type="text" name="inputText" onkeyup="startRequest()">
  <br>
  Output text: <input type="text" name="outputText" readonly>
</form>
Ogni volta che digitiamo un carattere nel campo inputText viene richiamata la funzione
startRequest e da qui cominciamo a parlare di AJAX.

Per prima cosa si dichiara una variabile globale (objXmlHttpReq) per contenere il
riferimento all'oggetto XMLHttpRequest (responsabile della comunicazione AJAX con il
server).
Cominciamo col dire che qui in passato si creavano i primi problemi in quanto IE non
implementava l'oggetto XMLHttpRequest standard ma ne utilizzava uno suo e quindi
dovevamo verificare quale browser stavamo utilizzando per creare l'oggetto giusto.
Tuttavia con IE7 Microsoft ha deciso di implementare anche lei l'oggetto XMLHttpRequest
superando quindi il problema che però rimane per le versioni precedenti.
Dopo     aver     dichiarato    la   variabile objXmlHttpReq      scriviamo    la    funzione
(createXmlHttpRequest) che ci servirà per creare l'istanza dell'oggetto XMLHttpRequest.
Questa funzione molto semplice testa se il browser che utilizziamo supporta l'oggetto
XMLHttpRequest ed in tal caso ne istanziamo uno altrimenti verifica se il browser supporta
i controlli ActiveX (ciò significa che stiamo utilizzando IE5 o IE6) e se il controllo ritorna
true verrà creata un'istanza tramite la chiamata all'oggetto equivalente implementato da
Microsoft.
Qualora anche questo non fosse il caso mostriamo un messaggio di errore e settiamo a
null la variabile objXmlHttpReq.


Listato 1

var objXmlHttpReq;

function createXMLHttpRequest()
{
  if (window.XMLHttpRequest){
    // codice per IE7+, Firefox, Chrome, Opera, Safari
    objXmlHttpReq=new XMLHttpRequest();
  } else if (window.ActiveXObject){
    // codice per IE6, IE5
    objXmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
  } else {
    objXmlHttpReq=null;
    alert("Il tuo browser non supporta XMLHTTP. Scaricati una versione più
aggiornata!");
  }
}


La seconda funzione startRequest           per prima cosa crea l'istanza dell'oggetto
XMLHttpRequest con la chiamata alla funzione sopra descritta.
Poi verificato che è stata effettivamente creata l'istanza dell'oggetto invia la richiesta al
server passandogli il valore del campo inputText ed infine imposta il gestore di eventi con
il nome della funzione da richiamare al verificarsi di un evento.
Listato 2

function startRequest()
{
  createXMLHttpRequest();
  if (objXmlHttpReq!=null){
    objXmlHttpReq.open("GET",
"upperCase.php?inputText="+document.getElementById('inputText').value",
true);
    objXmlHttpReq.send(null);
    objXmlHttpReq.onreadystatechange = handleStateChange;
  }
}

Quest'ultima funzione ha il compito di aggiornare il campo outputText con il valore di
ritorno dal server ma prima verifica che lo stato dell'oggetto XMLHttpRequest sia 4 (che
sta per complete).
Per completezza gli altri possibili stati sono:
    0 = uninitialized
    1 = loading
    2 = loaded
    3 = interactive


Listato 3

function handleStateChange()
{
  if (objXmlHttpReq.readystate == 4){
    if (objXmlHttpReq.status == 200 ){
      document.getElementById('outputText').value =
objXmlHttpReq.responseText;
    }
  }
}

Non resta che vedere il codice lato server.
Come abbiamo detto vogliamo trasformare in maiuscolo il contenuto del campo inputText
che ci viene passato al momento della richiesta del client.
Per far ciò è sufficiente recuperare il valore passato e restituirlo convertito in maiuscolo
dalla funzione php strtoupper ed il gioco è fatto.

Listato 4 (upperCase.php)

<?php
   if(isset($_GET['inputText']){
     echo strtoupper($_GET['inputText']);
   }
?>
Sarà ora sufficiente riassemblare le varie linee di codice sopra descritte per ottenere il
codice lato client del nostro esempio:


Listato 5 (text_to_upper.html)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Primo esempio di Ajax - PHP</title>
    <script language="javascript">
       var objXmlHttpReq;

      function createXMLHttpRequest()
      {
        if (window.XMLHttpRequest){
        // codice per IE7+, Firefox, Chrome, Opera, Safari
          objXmlHttpReq = new XMLHttpRequest();
        } else if (window.ActiveXObject){
        // codice per IE6, IE5
          objXmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
          objXmlHttpReq = null;
          alert("Il tuo browser non supporta XMLHTTP. Scaricati una
versione più aggiornata!");
        }
      }

       function startRequest()
       {
         createXMLHttpRequest();
         if (objXmlHttpReq != null){
           objXmlHttpReq.open("GET",
"upperCase.php?inputText="+document.getElementById('inputText').value,
true);
           objXmlHttpReq.send(null);
           objXmlHttpReq.onreadystatechange = handleStateChange;
         }
       }

      function handleStateChange()
      {
        if (objXmlHttpReq.readystate == 4){
          if (objXmlHttpReq.status == 200 ){
            document.getElementById('outputText').value =
objXmlHttpReq.responseText;
          }
        }
      }
    </script>
  </head>
<body>
    <form>
      Input text: <input type="text" id="inputText"
onkeyup="startRequest()" />
      <br>
      Output text: <input type="text" id="outputText" readonly />
    </form>
  </body>
</html>

Spero di essere stato chiaro e di avervi incuriosito abbastanza da farvi utilizzare AJAX
nelle vostre prossime applicazioni.




Riferimenti

     •   http://www.adaptivepath.com/ideas/essays/archives/000385.php
     •   http://it.wikipedia.org/wiki/AJAX
     •   http://www.w3schools.com/ajax/ajax_intro.asp
     •   http://www.ibm.com/developerworks/web/library/wa-ajaxintro1.html

More Related Content

What's hot

Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cmsorestJump
 
JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)jampslide
 
Lezione JSP database Crud
Lezione JSP database CrudLezione JSP database Crud
phpday 2006 - WS in PHP
phpday 2006 - WS in PHPphpday 2006 - WS in PHP
phpday 2006 - WS in PHP
Gaetano Giunta
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
Franco Lombardo
 
JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)jampslide
 
Lezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parteLezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parte
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
 
Yagwto
YagwtoYagwto
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
Riccardo Piccioni
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
Luciano Colosio
 
ASP.NET MVC 3 - Presentare i dati nella View
ASP.NET MVC 3 - Presentare i dati nella ViewASP.NET MVC 3 - Presentare i dati nella View
ASP.NET MVC 3 - Presentare i dati nella View
Manuel Scapolan
 
JavaScript
JavaScriptJavaScript
JavaScript
Manuel Scapolan
 
Java lezione 9
Java lezione 9Java lezione 9
Java lezione 9
Sergio Ronchi
 
BPM Standards
BPM StandardsBPM Standards
BPM Standards
michele malgaretto
 
Comunicazione tra procesi Linux
Comunicazione tra procesi LinuxComunicazione tra procesi Linux
Comunicazione tra procesi Linux
Marco Buttolo
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
Matteo Magni
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
DrupalDay
 

What's hot (20)

Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cms
 
JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)
 
Lezione JSP database Crud
Lezione JSP database CrudLezione JSP database Crud
Lezione JSP database Crud
 
phpday 2006 - WS in PHP
phpday 2006 - WS in PHPphpday 2006 - WS in PHP
phpday 2006 - WS in PHP
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)
 
Lezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parteLezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parte
 
Programming iOS lezione 4
Programming iOS lezione 4Programming iOS lezione 4
Programming iOS lezione 4
 
Programming iOS lezione 2
Programming iOS lezione 2Programming iOS lezione 2
Programming iOS lezione 2
 
Programming iOS lezione 1
Programming iOS lezione 1Programming iOS lezione 1
Programming iOS lezione 1
 
Yagwto
YagwtoYagwto
Yagwto
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
ASP.NET MVC 3 - Presentare i dati nella View
ASP.NET MVC 3 - Presentare i dati nella ViewASP.NET MVC 3 - Presentare i dati nella View
ASP.NET MVC 3 - Presentare i dati nella View
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Java lezione 9
Java lezione 9Java lezione 9
Java lezione 9
 
BPM Standards
BPM StandardsBPM Standards
BPM Standards
 
Comunicazione tra procesi Linux
Comunicazione tra procesi LinuxComunicazione tra procesi Linux
Comunicazione tra procesi Linux
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 

Viewers also liked

Monografia sobre crowdsourcing + crowd testing + processo de teste de software
Monografia sobre crowdsourcing + crowd testing + processo de teste de softwareMonografia sobre crowdsourcing + crowd testing + processo de teste de software
Monografia sobre crowdsourcing + crowd testing + processo de teste de software
Moisés Armani Ramírez
 
Enzyme creacion de valor lean y s-bpm
Enzyme  creacion de valor  lean y s-bpmEnzyme  creacion de valor  lean y s-bpm
Enzyme creacion de valor lean y s-bpm
Juan José Vázquez Rubio
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
Paulo Sérgio
 
Quiz ontabil
Quiz  ontabilQuiz  ontabil
Quiz ontabil
LayseStephanie
 
Galicia ruta betanzos ortigueira
Galicia ruta betanzos ortigueiraGalicia ruta betanzos ortigueira
Galicia ruta betanzos ortigueiraBernardo Bienz
 
Showreel Zichtbare Zaken
Showreel Zichtbare ZakenShowreel Zichtbare Zaken
Showreel Zichtbare ZakenHuub Koch
 
颐和园清晨
颐和园清晨颐和园清晨
颐和园清晨
LINWEIYUAN
 
Amazon Photos
Amazon PhotosAmazon Photos
Amazon Photos
kwags
 
Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...
Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...
Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...
Silvia Belli
 
Garcia
GarciaGarcia
Garcia
Radiotufo
 
Stress & Voeding
Stress & VoedingStress & Voeding
Stress & Voeding
Stressview
 
Geld lenen kost geld
Geld lenen kost geldGeld lenen kost geld
Geld lenen kost geld
David Notté
 
Lei de murphy
Lei de murphyLei de murphy
Lei de murphy
Maria Isabel
 
Buena EducacióN Y Mas
Buena EducacióN Y MasBuena EducacióN Y Mas
Buena EducacióN Y Mas
trafegandoronseis
 
猜猜我是誰?~部落格版1
猜猜我是誰?~部落格版1猜猜我是誰?~部落格版1
猜猜我是誰?~部落格版1sweetlongneck
 
Perpisahan
PerpisahanPerpisahan
Perpisahan
rohis
 
Sp020054 p001
Sp020054 p001Sp020054 p001
Sp020054 p001
Danilo branco 1
 

Viewers also liked (20)

Monografia sobre crowdsourcing + crowd testing + processo de teste de software
Monografia sobre crowdsourcing + crowd testing + processo de teste de softwareMonografia sobre crowdsourcing + crowd testing + processo de teste de software
Monografia sobre crowdsourcing + crowd testing + processo de teste de software
 
правила
правилаправила
правила
 
Enzyme creacion de valor lean y s-bpm
Enzyme  creacion de valor  lean y s-bpmEnzyme  creacion de valor  lean y s-bpm
Enzyme creacion de valor lean y s-bpm
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Quiz ontabil
Quiz  ontabilQuiz  ontabil
Quiz ontabil
 
Multimedia
MultimediaMultimedia
Multimedia
 
Galicia ruta betanzos ortigueira
Galicia ruta betanzos ortigueiraGalicia ruta betanzos ortigueira
Galicia ruta betanzos ortigueira
 
Showreel Zichtbare Zaken
Showreel Zichtbare ZakenShowreel Zichtbare Zaken
Showreel Zichtbare Zaken
 
颐和园清晨
颐和园清晨颐和园清晨
颐和园清晨
 
Amazon Photos
Amazon PhotosAmazon Photos
Amazon Photos
 
Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...
Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...
Navigazione e acquisti-10 Regole per difendersi dal malware-Silvia Belli-Ques...
 
Garcia
GarciaGarcia
Garcia
 
Presentation1
Presentation1Presentation1
Presentation1
 
Stress & Voeding
Stress & VoedingStress & Voeding
Stress & Voeding
 
Geld lenen kost geld
Geld lenen kost geldGeld lenen kost geld
Geld lenen kost geld
 
Lei de murphy
Lei de murphyLei de murphy
Lei de murphy
 
Buena EducacióN Y Mas
Buena EducacióN Y MasBuena EducacióN Y Mas
Buena EducacióN Y Mas
 
猜猜我是誰?~部落格版1
猜猜我是誰?~部落格版1猜猜我是誰?~部落格版1
猜猜我是誰?~部落格版1
 
Perpisahan
PerpisahanPerpisahan
Perpisahan
 
Sp020054 p001
Sp020054 p001Sp020054 p001
Sp020054 p001
 

Similar to Ajax Primi Passi Per Iniziare

Ajax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni webAjax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni web
Dominopoint - Italian Lotus User Group
 
Ajax e jQuery
Ajax e jQueryAjax e jQuery
Ajax e jQuery
Emiliano Castellina
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
Sergio Ronchi
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryAlberto Buschettu
 
S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6Elvis London
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
Matteo Magni
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
Michele Capra
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
Mariano Fiorentino
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
Giampiero Granatella
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
Gian Maria Ricci
 
6.01 php ajax_json_mysql
6.01 php ajax_json_mysql6.01 php ajax_json_mysql
6.01 php ajax_json_mysql
High Secondary School
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
Sabino Labarile
 
How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript
Stefano Marchisio
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016DavideBos
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016DavideBos
 
02 Struts Actions
02  Struts  Actions02  Struts  Actions
02 Struts Actions
Federico Paparoni
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
Sergio Ronchi
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
Andrea Colleoni
 

Similar to Ajax Primi Passi Per Iniziare (20)

Ajax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni webAjax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni web
 
Ajax e jQuery
Ajax e jQueryAjax e jQuery
Ajax e jQuery
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in Jquery
 
S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6S.P.R.I.Te. magazine n.6
S.P.R.I.Te. magazine n.6
 
Lezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparteLezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparte
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
6.01 php ajax_json_mysql
6.01 php ajax_json_mysql6.01 php ajax_json_mysql
6.01 php ajax_json_mysql
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
 
How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016
 
02 Struts Actions3016
02 Struts Actions301602 Struts Actions3016
02 Struts Actions3016
 
02 Struts Actions
02  Struts  Actions02  Struts  Actions
02 Struts Actions
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
 

Ajax Primi Passi Per Iniziare

  • 1. primi passi per iniziare Quante volte in questi ultimi mesi abbiamo sentito parlare di AJAX? Ho deciso di scrivere quest'articolo con l'intento di aiutare a sviluppare le prime applicazioni AJAX a coloro che si vogliono avvicinare a questo "nuovo mondo" ritenuto spesso essere una cosa per soli esperti. Come premesso partiamo da zero cominciando col dire che AJAX è un acronimo e sta per Asynchronous Javascript and XML. AJAX non è un linguaggio di programmazione ma piuttosto la combinazione di più tecnologie (HTML , XML, Javascript, CSS) per la realizzazione di applicazioni web più veloci. Il tradizionale modello web si basa sul paradigma request/response sincrono cioè il browser fa una richiesta al web server e rimane in attesa della risposta fino alla risposta da parte del web server che a seconda dei casi può impiegare più o meno tempo. Mentre, come il nome stesso suggerisce, AJAX si basa su comunicazione asincrona cioè il browser fatta la richiesta non si blocca aspettando la risposta ma permette all'utente di continuare la navigazione aggiornando solo in seguito la pagina html con i dati restituiti dal server. Figura. 1 Per comunicare con il server AJAX usa Javascript ed in particolare l'oggetto XMLHttpRequest (XHR) ciò comporta che a differenza di una comunicazione web classica ora abbiamo un livello in più lato client che viene chiamato motore AJAX (AJAX engine) ed è proprio questo livello che permette di non dover ricaricare sempre la pagina ad ogni
  • 2. richiesta ma soltanto quella parte che ci interessa. Il server può rispondere inviando i dati in formato XML che vengono quindi processati utilizzando Javascript ma questo non è strettamente necessario.
  • 3. Figura. 2 Questo è ciò che avviene in sintesi ora vediamo un semplice esempio di utilizzo puramente didattico di come le cose funzionino in pratica. Come ultima cosa ricordo che AJAX lavora lato client e che quindi possiamo lavorare lato server con il linguaggio che più ci aggrada (Java, PHP, .Net, etc). Io utilizzerò in seguito PHP. Let's go. Immaginiamo di avere un form con due campi testo. Vogliamo che il secondo campo, dopo ogni carattere digitato nella prima casella di testo, si valorizzi con il testo reso maiuscolo del primo. Perciò cominciamo con lo scrivere il form con i due campi testo. <form> Input text: <input type="text" name="inputText" onkeyup="startRequest()"> <br> Output text: <input type="text" name="outputText" readonly> </form>
  • 4. Ogni volta che digitiamo un carattere nel campo inputText viene richiamata la funzione startRequest e da qui cominciamo a parlare di AJAX. Per prima cosa si dichiara una variabile globale (objXmlHttpReq) per contenere il riferimento all'oggetto XMLHttpRequest (responsabile della comunicazione AJAX con il server). Cominciamo col dire che qui in passato si creavano i primi problemi in quanto IE non implementava l'oggetto XMLHttpRequest standard ma ne utilizzava uno suo e quindi dovevamo verificare quale browser stavamo utilizzando per creare l'oggetto giusto. Tuttavia con IE7 Microsoft ha deciso di implementare anche lei l'oggetto XMLHttpRequest superando quindi il problema che però rimane per le versioni precedenti. Dopo aver dichiarato la variabile objXmlHttpReq scriviamo la funzione (createXmlHttpRequest) che ci servirà per creare l'istanza dell'oggetto XMLHttpRequest. Questa funzione molto semplice testa se il browser che utilizziamo supporta l'oggetto XMLHttpRequest ed in tal caso ne istanziamo uno altrimenti verifica se il browser supporta i controlli ActiveX (ciò significa che stiamo utilizzando IE5 o IE6) e se il controllo ritorna true verrà creata un'istanza tramite la chiamata all'oggetto equivalente implementato da Microsoft. Qualora anche questo non fosse il caso mostriamo un messaggio di errore e settiamo a null la variabile objXmlHttpReq. Listato 1 var objXmlHttpReq; function createXMLHttpRequest() { if (window.XMLHttpRequest){ // codice per IE7+, Firefox, Chrome, Opera, Safari objXmlHttpReq=new XMLHttpRequest(); } else if (window.ActiveXObject){ // codice per IE6, IE5 objXmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP"); } else { objXmlHttpReq=null; alert("Il tuo browser non supporta XMLHTTP. Scaricati una versione più aggiornata!"); } } La seconda funzione startRequest per prima cosa crea l'istanza dell'oggetto XMLHttpRequest con la chiamata alla funzione sopra descritta. Poi verificato che è stata effettivamente creata l'istanza dell'oggetto invia la richiesta al server passandogli il valore del campo inputText ed infine imposta il gestore di eventi con il nome della funzione da richiamare al verificarsi di un evento.
  • 5. Listato 2 function startRequest() { createXMLHttpRequest(); if (objXmlHttpReq!=null){ objXmlHttpReq.open("GET", "upperCase.php?inputText="+document.getElementById('inputText').value", true); objXmlHttpReq.send(null); objXmlHttpReq.onreadystatechange = handleStateChange; } } Quest'ultima funzione ha il compito di aggiornare il campo outputText con il valore di ritorno dal server ma prima verifica che lo stato dell'oggetto XMLHttpRequest sia 4 (che sta per complete). Per completezza gli altri possibili stati sono: 0 = uninitialized 1 = loading 2 = loaded 3 = interactive Listato 3 function handleStateChange() { if (objXmlHttpReq.readystate == 4){ if (objXmlHttpReq.status == 200 ){ document.getElementById('outputText').value = objXmlHttpReq.responseText; } } } Non resta che vedere il codice lato server. Come abbiamo detto vogliamo trasformare in maiuscolo il contenuto del campo inputText che ci viene passato al momento della richiesta del client. Per far ciò è sufficiente recuperare il valore passato e restituirlo convertito in maiuscolo dalla funzione php strtoupper ed il gioco è fatto. Listato 4 (upperCase.php) <?php if(isset($_GET['inputText']){ echo strtoupper($_GET['inputText']); } ?>
  • 6. Sarà ora sufficiente riassemblare le varie linee di codice sopra descritte per ottenere il codice lato client del nostro esempio: Listato 5 (text_to_upper.html) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Primo esempio di Ajax - PHP</title> <script language="javascript"> var objXmlHttpReq; function createXMLHttpRequest() { if (window.XMLHttpRequest){ // codice per IE7+, Firefox, Chrome, Opera, Safari objXmlHttpReq = new XMLHttpRequest(); } else if (window.ActiveXObject){ // codice per IE6, IE5 objXmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); } else { objXmlHttpReq = null; alert("Il tuo browser non supporta XMLHTTP. Scaricati una versione più aggiornata!"); } } function startRequest() { createXMLHttpRequest(); if (objXmlHttpReq != null){ objXmlHttpReq.open("GET", "upperCase.php?inputText="+document.getElementById('inputText').value, true); objXmlHttpReq.send(null); objXmlHttpReq.onreadystatechange = handleStateChange; } } function handleStateChange() { if (objXmlHttpReq.readystate == 4){ if (objXmlHttpReq.status == 200 ){ document.getElementById('outputText').value = objXmlHttpReq.responseText; } } } </script> </head>
  • 7. <body> <form> Input text: <input type="text" id="inputText" onkeyup="startRequest()" /> <br> Output text: <input type="text" id="outputText" readonly /> </form> </body> </html> Spero di essere stato chiaro e di avervi incuriosito abbastanza da farvi utilizzare AJAX nelle vostre prossime applicazioni. Riferimenti • http://www.adaptivepath.com/ideas/essays/archives/000385.php • http://it.wikipedia.org/wiki/AJAX • http://www.w3schools.com/ajax/ajax_intro.asp • http://www.ibm.com/developerworks/web/library/wa-ajaxintro1.html