Con una querystring più o meno complessa le possibilità di interazione sono già molto elevate. Tutti gli applicativi che non richiedono una mole di scambio dati eccessiva possono usufruire di una chiamata asincrona semplice e veloce quale è, come abbiamo visto, quella in GET.
Alcuni esempi potrebbero essere un login, un sistema di votazione, una galleria di immagini, un motore di ricerca e tanti altri ancora. Tutte situazioni dove ricaricare la pagina per intero potrebbe risultare dispendioso, in termini di banda o di calcolo per il server, oppure inutile, se l'azione scelta richiede l'invio di una linea di testo, un messaggio o il salvataggio di un cookie.
Nell'esempio proposto di seguito mostriamo all'utente le ultime news del sito di Google. Tale serivizio è una pagina a se stante, ma potrebbe essere integrato facilmente all'interno di un portale. Tipico caso dove una chiamata asincrona dinamica può venire incontro ad uno sviluppatore.
Inizialmente è stata fatta un'analisi sulla degradabilità del servizio, chiunque deve poter visualizzare le news richieste, quindi il form dovrà essere non vincolante.
La seconda analisi è sulla validità dell'operazione, ovvero deve essere supportata sui browser più diffusi e non deve generare errori di autorizzazione, essendo la richiesta ad una pagina esterna al sito. Per ovviare a questa restrizione si è scelto di leggere la richiesta lato server e di restituirla all'oggetto XMLHttpRequest.
In ultimo, per dare un servizio completo, le news potranno essere selezionate tra alcuni dei principali paesi del globo, per questo si rende necessario l'invio di una variabile 'lingua' in GET.
La prima parte da capire è proprio quella lato server, esaminiamo il codice PHP servendoci dei commenti.
Listato 28. leggiNews.php
<?php
// verifica della richiesta in GET
// la variabile 'lingua' deve essere presente
if(isset($_GET['lingua'])) {
// se presente, impostiamo il documento come XML con codifica UTF-8
header("Content-type: text/xml; charset=UTF-8");
// mandiamo in output la pagina delle news nella lingua scelta
echo file_get_contents("http://news.google.it/news?output=rss&ned={$_GET['lingua']}");
}
// se non è stata specificata alcuna lingua
// scriviamo un messaggio di avviso
else
echo "Non è stata selezionata alcuna lingua.";
?>
Quanto proposto dovrebbe essere di facile comprensione per uno sviluppatore PHP, l'unica cosa da approfondire è che qualora l'host remoto non dovesse supportare l'apertura di files esterni, non c'è modo di richiamare una pagina al di fuori dello spazio web e sarà quindi possibile testare questo esempio solo nel proprio webserver locale.
La scelta del feed di tipo RSS semplifica le operazioni di parsing. Possiamo riadattare il codice già usasto per leggere il contenuto del blog di HTML.it . Prima di scendere nei dettagli del codice client, ecco riproposto lo stesso codice per ASP.NET
Listato 29. leggiNews.aspx
<%@ Page Language="C#" %>
<script runat="server" Language="C#">
void Page_Load() {
// dichiarazione delle variabili utili
System.String lingua = Request.QueryString.Get("lingua");
System.IO.StreamReader output;
// verifica della richiesta in get
// la variabile lingua deve essere presente
if (lingua != null) {
// se presente, impostiamo il documento come XML con codifica UTF-8
Response.ContentType = "text/xml";
Response.Charset = "UTF-8";
// mandiamo in output la pagina delle news nella lingua scelta
output = new System.IO.StreamReader(System.Net.WebRequest.Create("http://news.google.it/news?output=rss&ned=" + lingua).GetResponse().GetResponseStream());
// riutilizziamo la variabile 'lingua' per leggere il risultato della richiesta
while ((lingua = output.ReadLine()) != null)
Response.Write(lingua);
}
// se non è stata specificata alcuna lingua
// scriviamo un messaggio di avviso
else
Response.Write("Non è stata selezionata alcuna lingua.");
}
</script>
Anche in questo caso le due versioni del codice lato server si assomigliano molto. È necessario ora scrivere una funzione in grado di richiamare questi script e di restituirci il risultato in modo ordinato.