Asier Marqués

Hablando sobre tecnologías web y otras cosas que me interesan
Archivado como Aplicaciones Web, Desarrollo Web, Internet, javaScript

Uno de los principales problemas que tienen los desarrolladores web a la hora de desarrollar aplicaciones RIA con ajax, es la limitación de javascript para cumplir la política de mismo origen.

Teóricamente, debido a esta política, JavaScript no puede lazar peticiones o consumir datos entre dominios distintos. Digo teóricamente, porque esto puede conseguirse con algunas técnicas de hacking como csshttprequest.

Para no tenir que recurrir a estas técnicas existe una forma más elegante de conseguir esto y es mediante jsonp.

Básicamente se basa en una técnica en la que entran en juego tanto el frontend como el backend, en la petición/respuesta json.

El cliente envía una petición de tipo jsonp con un parámetro en la url que tendría como valor el nombre de la función que manejará la respuesta de dicha petición. En el servidor se retorna una respuesta json como valor de una variable con el Mismo nombre de dicha función.

Jquery puede trabajar con jsonp, el proceso sería el siguiente:

Javascript en el frontend con jquery


$(document).ready(function () {

$.ajax({
dataType: "jsonp",
data: "",
url: "http://example.com/json?method=?",
success: function(json){ alert(json.key); }
});

/*

Si el método que se le pasa en la url

tiene un valor "?" jquery generará

un valor aleatorio para la función que

manejará la respuesta. Esto nos evita

problemas con la cache

*/

})

Código de respuesta en backend en php


header('Content-type: text/json');

$respuesta = array('key'=>'valor');

echo $_GET['method']."(".json_encode($respuesta).")");

exit();

Esto nos permitirá trabajar con ajax entre dominios y gestionar la respuesta json a  nuestro antojo.

Comentarios (2) Publicado por Asier Marqués el Jueves, 12 de Marzo del 2009


Puedes seguir los comentarios de ésta entrada via "RSS 2.0" y dejar un trackback desde tu sitio.

2 Respuestas to “Ajax entre dominios con jsonp y jquery”

Añade un comentario