XML? no, grazie

Il termine Ajax è un acronimo, e significa:
Asynchronous Javascript and XML.
XML è una delle tre parti, eppure noi di solito usiamo Ajax senza neppure toccare XML. Come mai? semplicemente chi ha coniato il termine pensava che il modo migliore per comunicare tra il programma che risiede sul server, e il client che fa la richiesta in Ajax, era quello di utilizzare XML. Lo pensano in molti, ma in realtà Ajax non ha niente a che fare con XML. PHP (o chi per lui) e Javascript possono spedirsi i dati in qualunque formato desiderabile. Si noti come di solito la grande quantità dei dati passi dal server al client. Ad esempio in Gmail il server spedisce al client informazioni sui messaggi, e il client si occupa tramite Javascript di visualizzare tali messaggi nella pagina dell'utente. Di solito il passaggio di parametri dal client al server avviene semplicemente passando dei parametri tramite una richeista GET, come abbiamo fatto noi poco fa nel caso del nome.
Per questa ragione uno dei miei metodi preferiti per passare dati dal server all'interprete Javascript del client è utilizzare un formato di semplice testo nel caso di operazioni molto semplici. Ad esempio se devo controllare se uno username in fase di registrazione in un servizio web è già occupato prima di ricaricare la pagina, faccio ritornare dal server un semplice OK o ERR, e controllo dal Javascript se la stringa ritornata è l'una o l'altra.
Se invece è necessario passare molti dati, utilizzo una tecnica diversa. Creo nello script che gira sul server un array Javascript e lo spedisco. Dal lato Javascript uso la funzione eval per valutare l'Array, è già pronta, non mi serve scrivere un parser. Ecco un esempio in PHP.
<?
    echo('var data = Array("');
    echo($a);
    echo('","');
    echo($b);
    echo(")");
?>


Semplice no? ma cosa succede se $a o $b contengono caratteri (in questo contesto) speciali come le virgolette? Per evitare qualunque problema basta utilizzare la seguente funzione.

<?
function safejsstring($s) {
    $a = unpack("C*",$s);
    $res = "";
    foreach($a as $byte) {
        $res .= sprintf("\x%02x", $byte);
    }
    return $res;
}
?>


Tale funzione prende una stringa PHP e la converte interamente in sequenze di escape nella forma \xHH dove HH è sono due cifre esadecimali. In questo modo Javascript riuscirà sempre ad interpretare la stringa in maniera corretta anche se fosse costituita da dati binari. Dal PHP potete generare semplicemente anche Array annidati, in breve strutture dati complicate quanto lo desiderate. Se volete usare XML... non vi tiene nessuno ;) ma volevo soltanto che fosse chiaro che non è necessario e il termine è finito dentro questa tecnica di programmazione solo perchè l'autore dell'acronimo ha deciso così.