Ahora nos queda ver como en el servidor recibir datos con formato JSON y proceder a generar una clase en PHP mediante la función json_decode.
La sintaxis es:
$cad=json_decode(stripslashes($_REQUEST['cadena'])); echo 'Nombre:'.$cad->nombre; ... ...
Es decir la función json_decode recibe como parámetro una cadena con datos codificados en JSON y procede a retornar la información en un objeto.
Confeccionaremos un problema que envíe desde el navegador información en formato JSON y en el servidor la convertiremos en un objeto de PHP y procederemos a generar un trozo de HTML que retornaremos al navegador para que lo muestre.
El archivo pagina1.html
addEventListener('load',inicializarEventos,false); function inicializarEventos() { var ref=document.getElementById('boton1'); ref.addEventListener('click',botonPresionado,false); } function botonPresionado(e) { var obj={ nombre:'juan', edad:25, sueldos:[1200,1700,1990] }; var cadena=JSON.stringify(obj); enviarDatos(cadena); } var conexion1; function enviarDatos(cadena) { conexion1=new XMLHttpRequest(); conexion1.onreadystatechange = procesarEventos; conexion1.open('GET','pagina1.php?cadena='+cadena, true); conexion1.send(null); } function procesarEventos() { var resultados = document.getElementById("resultados"); if(conexion1.readyState == 4) { resultados.innerHTML = conexion1.responseText; } else { resultados.innerHTML = "Cargando..."; } }
Cuando se presiona el botón procedemos a partir de un objeto JavaScript generar una cadena en formato JSON, luego procedemos a llamar a la función enviarDatos:
function botonPresionado(e) { var obj={ nombre:'juan', edad:25, sueldos:[1200,1700,1990] }; var cadena=JSON.stringify(obj); enviarDatos(cadena); }
La función enviarDatos procede a crear un objeto de la clase XMLHttpRequest y pasa mediante el parámetro GET la cadena en formato JSON:
var conexion1; function enviarDatos(cadena) { conexion1=new XMLHttpRequest(); conexion1.onreadystatechange = procesarEventos; conexion1.open('GET','pagina1.php?cadena='+cadena, true); conexion1.send(null); }
Solo queda mostrar el trozo de datos en HTML que retorna el servidor:
function procesarEventos() { var resultados = document.getElementById("resultados"); if(conexion1.readyState == 4) { resultados.innerHTML = conexion1.responseText; } else { resultados.innerHTML = "Cargando..."; } }
Lo nuevo se centra en el archivo pagina1.php:
<?php $cad=json_decode(stripslashes($_REQUEST['cadena'])); echo 'Nombre:'.$cad->nombre; echo '<br>'; echo 'Edad:'.$cad->edad; echo '<br>'; echo 'Primer sueldo:'.$cad->sueldos[0]; echo '<br>'; echo 'Segundo sueldo:'.$cad->sueldos[1]; echo '<br>'; echo 'Tercer sueldo:'.$cad->sueldos[2]; ?>
La función que convierte una cadena con formato JSON en un objeto de PHP es:
$cad=json_decode(stripslashes($_REQUEST['cadena']));
Recordemos que con la función stripslashes sacamos los caracteres de escape(barras invertidad para las comillas entre otras)
Luego podemos fácilmente acceder a los atributos del objeto con la sintaxis:
echo 'Nombre:'.$cad->nombre; echo '<br>'; echo 'Edad:'.$cad->edad; echo '<br>'; echo 'Primer sueldo:'.$cad->sueldos[0]; echo '<br>'; echo 'Segundo sueldo:'.$cad->sueldos[1]; echo '<br>'; echo 'Tercer sueldo:'.$cad->sueldos[2];
Confeccionar un problema que envíe desde el navegador información en formato JSON y en el servidor convertirla en un objeto de PHP y proceder a generar un trozo de HTML que retorne al navegador para que lo muestre.