06 febrero 2009

De xhtml, JSON y como pasar variables de PHP a Javascript

Quería compartir una solución que he tenido que encontrar para compartir algunas variables del controlador con javascript.
El problema que tenia inicialmente era que desde javascript (siempre utilizando JQuery) no tenia la información del idioma en que se estaba trabajando ( independientemente del navegador) y algunas otras variables como por ejemplo el centro de un mapa para inicializarlo.

Se me ocurrió la idea de guardar esta información en el mismo header del xhtml para luego capturarla desde JS.

Inicialmente creé en la clase controlador un array y dos métodos para agregar elementos que iría llamando desde cada controlador.
De esta manera iría llenando con las variables desde php cada vez que lo necesitaba, de esta manera:

var $initdata = array();
function setinitdata($key, $value){$initdata[$key]=$value}


Una vez generado el array en el controlador, desde la vista, solo tenia que llamar a otro metodo para que codifique el array en JSON, php 5.2 lo soporta nativamente, aunque ahora mismo estoy utilizando una clase aparte.

Luego, el string json resultante lo guardo en un meta dentro del xhtml de esta manera (esto es solo un ejemplo, en dilogs se guardan mas de una variable, y dependiendo la pagina también se guardan mensajes de texto):

meta id="initdata" content='{controller:{langid:"es"}}'


Desde javascript se accede facilmente a la información de esta manera:

var initdata = null;
$(document).ready(function(){
var json = $("#initdata").attr("content");
eval( 'initdata = ' + json );
});


En JS tendremos en la variable initdata toda la información estructurada que teníamos en la misma variable del controlador en PHP.

Realmente se me ha hecho muy practico y facil de acceder. En algunos casos proceso la informacion en el controllador antes de enviarla al header y de esta manera gano mucho tiempo y seguridad en el cliente.


1 comentario:

Unknown dijo...

gracias por el tip, hombre me habéis salvado la vida