jQuery
jQuery
¡INSCRÍBETE A CUALQUIER CURSO CON UN 50% DE DESCUENTO PARA NUEVOS CLIENTES!

Hacer peticiones ajax a otros dominios no es posible con json, esto se debe a motivos de seguridad y protección y se llama cross domain. Para este motivo tenemos jsonp, que hace la misma función pero en vez de acceder a datos locales alojados en nuestro servidor, lo hace en servidores remotos, siempre que nos lo permitan claro está. Para saber si está permitido acceder a un servidor y en específico a un archivo, método o lo que sea, lo primero que debemos hacer es devolver un json con json_encode de los datos que deseemos, pero no basta hacer eso, ya que si hacemos un echo json_encode($array) nos dirá que por aquí no pasamos.

Para hacer la devolución de los datos, si nuestro callback se llama callback y a nuestro array json le hemos llamado $array deberíamos hacer los siguiente:

Hasta aquí debemos tener claro que realmente callback es una variable get que jsonp nos crea aleatoriamente, éstas son claves únicas para reconocer si la petición enviada es la que hemos recibido y así devolver los datos.

Con todo el rollo que os he soltado, la mejor forma es ver un ejemplo completo con un servidor que envia y otro que recibe y muestra el json, así que el ejemplo sería lo siguiente.

Petición jsonp

Como vemos, al pulsar el botón llamamos a la función js get_jsonp_cross_domain y si todo sale bien, dentro del div con clase data nos imprimirá el valor de la clave mensaje del json que devolvemos.

La petición la haremos a otro servidor, así que si creamos un archivo en nuestro servidor llamado archivo.php y colocamos lo siguiente, al pulsar el botón deberíamos ver el resultado correctamente, veamos lo que tiene que tener el archivo que recibe la petición.

Y de esta forma tan sencilla podemos hacer un servicio, por ejemplo, para consumir datos o más cosas que necesitemos, porque no, sólo faltaría tener algo interesante que la gente quiera consumir, un saludo.

Si te ha sido útil el post puedes utilizar los botones de las redes sociales para ayudarme con mi trabajo :D.