JavaScript  »  Guide  »  Guida AJAX 

Leggere un testo



A questo punto si hanno tutte le informazioni per creare un primo applicativo in AJAX. Per concentrarsi solo sul codice utile è consigliabile mettere le funzioni più comuni su un file esterno, chiamato in questo caso utility.js e visionabile o scaricabile in questa pagina. Si consiglia inoltre di leggere i commenti presenti al suo interno.

Ecco il primo esempio di richiesta AJAX, scritto in xhtml 1.1 e compatibile con i validatori più conosciuti.

Listato 15. Importare un testo con AJAX

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" >
<head>
<title>HTML.it | AJAX | Primo esempio</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="description" content="HTML.it | Guida ajax, request testuale" />
<meta name="keywords" content="guida, ajax, remote scripting, esempio, esempi" />
<meta name="author" content="Andrea Giammarchi per HTML.IT" />
<script type="text/javascript" src="utility.js"><!--// ajax utility //--></script>
<script type="text/javascript"><!--//

// funzione di caricamento testo,
// accetta una stringa contenente
// il nome di un file da leggere
function caricaTesto(nomeFile) {

  // variabili di funzione
  var
    // assegnazione oggetto XMLHttpRequest
    ajax = assegnaXMLHttpRequest(),
    // assegnazione elemento del documento
    elemento = prendiElementoDaId("contenuto-dinamico"),
    // risultato booleano di funzione
    usaLink = true;
  
  // se l'oggetto XMLHttpRequest non è nullo
  if(ajax) {
    // il link al file non deve essere usato
    usaLink = false;

    // impostazione richiesta asincrona in GET
    // del file specificato
    ajax.open("get", nomeFile, true);

    // rimozione dell'header "connection" come "keep alive"
    ajax.setRequestHeader("connection", "close");

    // impostazione controllo e stato della richiesta
    ajax.onreadystatechange = function() {
      
      // verifica dello stato
      if(ajax.readyState === readyState.COMPLETATO) {
        // verifica della risposta da parte del server
        if(statusText[ajax.status] === "OK")
          // operazione avvenuta con successo
          elemento.innerHTML = ajax.responseText;
        else {
          // errore di caricamento
          elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />";
          elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
        }
      } 
    }

    // invio richiesta
    ajax.send(null);
  }
   
  return usaLink;


//--></script>
<style type="text/css" media="all">
body {
 font-family: Verdana, Helvetica, sans-serif;
 font-size: 9pt;
 background: #FFF;
 color: #000;
}
h1 {
 font-size: 12pt;
 border-bottom: 1px solid silver;
 color: #009;
}
</style>
</head>
<body>
<div>
<h1>Request Testuale</h1>

<div id="contenuto-dinamico">
Questo testo è stato inserito all'interno di un elemento di tipo div
con id univoco: contenuto-dinamico .<br />
Per cambiare questo contenuto è sufficiente clickare su

<!-- è importante fare caso alla costruzione di questo link:
     permette di leggere il testo anche senza AJAX -->

<a href="testo.txt"
onclick="return caricaTesto(this.href);"
onkeypress="return this.onclick();"
tabindex="1">questo link</a>.
</div>

</div>
</body>
</html>

I commenti presenti nel codice JavaScript dovrebbero essere abbastanza esplicativi, i passaggi fondamentali sono:

  • si verifica la possibilità di usare AJAX,
  • si imposta la richiesta,
  • si effettuano operazioni differenti a seconda che quest'ultima sia fallita o meno.

Note sull'accessibilità

È degno di nota anche il markup utilizzato nell'esempio. Infatti con o senza il supporto di XMLHttpRequest, sia che la pagina fosse XHTML, sia che non lo fosse, rimane salvaguardata l'accessibilità al testo. Questo grazie al modo in cui è costruito il link.

La doppia assegnazione dei due eventi, onclick ed onkeypress, potrebbe essere considerata superflua, considerando che il solo evento onclick è gestito da qualunque browser come pointer-indipendent e sfruttabile quindi da qualunque dispositivo di puntamento, tastiera compresa. Le regole sull'accessibilità però obbligano ancora gli sviluppatori più attenti a questo tema ad inserire il controllo su onkeypress.

Non è obiettivo di questa guida spiegare come gestire gli eventi della tastiera mentre è fondamentale capire che costruire un link in questo modo consente l'accesso al testo sia di utenti senza javascript sia dai robots, quali ad esempio i motori di ricerca, che fin'ora difficilmente indicizzano i contenuti asincroni richiamati in AJAX.

Il concetto della multi compatibilità ha un nome ben preciso: degradabilità.

Listato 16. Esempio base di link degradabile

<a href="pagina.html" onclick="return richiestaAsincrona(this.href);">pagina.html</a>

Ultimi articoli JavaScript

PhantomJS, headless browser per test con Javascript

Il tool ideale per realizzare, da terminale, operazioni in remoto su...

Creare e leggere QR Code in JavaScript

Applicazioni 'QR Code enabled' per il Web e per il mobile,...

Jquery UI Map: web-mapping con Google Maps e jQuery

Un plugin di jQuery UI per intefacciare applicaizoni Web/mobile con...

Scrollorama e Scrolldeck, slideshow d'effetto con jQuery

Plugin jQuery per ottenere Slideshow con diversi effetti di scrolling

jCanvas, un primo semplice grafico

Alla scoperta della libreria jCanvas, per semplificare il disegno e...

Altri articoli

Guide JavaScript

Guida Node.js

Il framework che permette di per usare V8, l'interprete JavaScript...

Canvas, guida ai framework

Canvas, tra gli elementi di HTML5 è forse quello di maggior impatto....

Guida Javascript: tecniche avanzate

Una guida dal taglio pratico per approfondire la programmazione a...

Altre guide

Newsletter @JavaScript

Ogni martedì, direttamente nella tua e-mail: guide, articoli, script, novità e approfondimenti tecnici su JavaScript.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Webmaster base

18 Giugno 2012 a Milano
Disponibilità: 6 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso JQuery e Ajax per Webmaster

03 Luglio 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti

Corso Webmaster base

11 Giugno 2012 a Roma
Disponibilità: 7 Posti