A lo largo del Manual de JSON para PHP habíamos tratado ya diversos ejemplos de comunicación de datos entre PHP y Javascript, pero revisando el texto con calma veo que no hemos hecho ningún ejemplo sobre cómo realizar el paso contrario, es decir, enviar los datos de Javascript hacia PHP.
La transferencia de esa información se podría hacer de diversas maneras, pero creo que lo más cómodo sería hacer una conexión Ajax desde Javascript, enviando los datos en notación JSON hacia una página PHP. Tanto para utilizar Ajax con comodidad, como para generar el JSON, es interesante utilizar algún framework Javascript que nos facilite las tareas, por lo que en este ejemplo veremos cómo realizar el proceso utilizando Mootools.
var datosPaises = [
[
"España",
"Madrid",
42000000,
"Euro"
],
[
"Francia",
"París",
63500000,
"Euro"
],
[
"Brasil",
"Brasilia",
195000000,
"Real"
],
[
"Marruecos",
"Rabat",
34000000,
"Dirham"
],
[
"India",
"Nueva Delhi",
1000000000,
"Rupia"
]
];
var miJSON = JSON.encode(datosPaises);
Con esto consigo una variable llamada "miJSON" que tiene una cadena de caracteres con el array definido en JSON.
var miAjax = new Request({
url: "recibo-json.php",
data: "datos=" + miJSON,
onSuccess: function(textoRespuesta){
$('resultado').set("html", textoRespuesta);
},
onFailure: function(){
$('resultado').set("html", "fallo en la conexión Ajax");
}
})
miAjax.send();
Como se puede ver en el código, cuando se haya producido la respuesta del servidor, o el posible error de conexión si es que algo ha ido mal, se actualiza el HTML de un elemento con identificador id="resultado". Por ello, en el cuerpo de nuestra página deberemos tener ese elemento, con un código HTML como este:
<div id="resultado"></div>
Desde PHP deberemos recibir los datos enviados en la solicitud Ajax, decodificar el JSON y producir una salida, tal como necesitemos en nuestra aplicación web. Todo eso se puede ver en el siguiente código fuente.
<?php
if($_POST){
//echo "recibo algo POST";
//recibo los datos y los decodifico con PHP
$misDatosJSON = json_decode($_POST["datos"]);
//con esto podría mostrar todos los datos del JSON recibido
//print_r($misDatosJSON);
//ahora muestro algún dato de este array bidimiesional
$salida = "";
$salida .= "Capital de Francia: " . $misDatosJSON[1][1];
$salida .= "<br>Nombre del país 1 (índice 0 del array): " . $misDatosJSON[0][0];
$salida .= "<br>Nombre del país 3: " . $misDatosJSON[2][0];
echo $salida;
}else{
echo "No recibí datos por POST";
}
?>
El procedimiento relatado aquí se ha hecho de manera general, por lo que cada uno podría adaptar esas técnicas para realizar por su cuenta comunicaciones desde Javascript a PHP, tal como sus aplicaciones web lo estén requiriendo.
El ejemplo en marcha puede verse en una página aparte.
El código fuente de este ejemplo, tanto los archivos Javascript como el PHP, podemos encontrarlo en un ZIP que ofrecemos para descarga.