Passaggio di parametri dal server al client JavaScript

Molto spesso nello sviluppo di un sito Internet può capitare di dove inviare alcune informazioni salvate nel database ad uno script che andrà eseguito nel client dal browser.

Il metodo più semplice e diffuso è quello di passare i parametri direttamente in un blocco di codice JavaScript in linea, assieme al codice del documento HTML.

<?php
myText = "Testo che proviene dal server";
myURL = "http://url-letto-dal-server.com";
?>
alert("<?php echo myText ?>");
location.href = "<?php echo myURL ?>";

Per mantenere il codice maggiormente pulito, sarebbe ideale inserire tutti gli script JS e i fogli di stile CSS in file esterni, in modo da separare parte dinamica e la formattazione dai contenuti del documento HTML. In questo modo il nostro sito diventa più semantico, oltre che più accessibile. Si pone però il problema di far avere dei parametri agli script esterni senza richiamare ulteriori script lato server e consumare risorse.

Prima di HTML5

I tag META, nella sezione HEAD, sono da sempre usati per aggiungere informazioni al documento, normalmente per fornire l’autore, la data di modifica ed altre informazioni agli spider dei motori di ricerca. Le raccomandazioni del w3c non definiscono e non limitano quali siano le informazioni che possano essere trasmesse, quindi nessuno ci impedisce di creare dei meta-dati personalizzati. La soluzione che propongo è di inserire i valori di cui abbiamo bisogno in nostri tag META ed accedervi da JavaScript utilizzando le funzioni del DOM. Se il dato da trasmettere è un URI, le raccomandazioni del w3c consigliano di usare il tag LINK.

<meta name="myText" id="myText" value="<?php echo myText ?>" />
<link rel="myURL" id="myURL" href="<?php echo myText ?>" />
alert(document.getElementById("myText").value);
location.href = document.getElementById("myURL").href;

Il codice dello script ora può essere comodamente inserito in un file esterno con estensione JS da collegare al documento. Gli script del server dovranno generare un’unica pagina HTML, utilizzando le stesse risorse di calcolo della soluzione classica, ma sia la manutenzione del codice javascript che la sua leggibilità sono notevolmente migliorate.

Soluzione attuale per HTML 5

La soluzione precente, seppur perfettamente funzionante anche con HTML5, ha un problema: durante la convalida del codice con il validatore W3c causerà degli errori. Questo perché HTML5 non consente l’uso di meta e link tag personalizzati.

Lo stesso HTML5 però ha previsto la possibilità di utilizzare degli attributi aggiuntivi personalizzati, da inserire a piacere in qualsiasi tag, che non causeranno errori di convalida. Questi attributi devo iniziare con il suffisso data-.

<body data-myText="<?php echo myText ?>" data-myURL="<?php echo myURL ?>">
alert(document.body.getAttribute("myText"));
location.href = document.body.getAttribute("myURL");

.