Por razones de seguridad, algunos navegadores no permiten realizar peticiones AJAX entre diferentes dominios, es lo que se conoce como el Cross-domain (de los cojones). Una forma de solucionarlo es con JSONP, que funciona de la siguiente manera en su formato más sencillo:
Donde realizas la petición ajax, especificas en el dataType que es un jsonp y defines crossDomain como true.
$.ajax({
type: 'POST',
url: 'laDireccionQueSea.php',
data: { algunaVariable: 'algunDato' },
dataType: "jsonp",
crossDomain: true,
cache:false,
success: function(data){
// Lo que tenga que hacer cuando se reciben los datos
},
error:function(error){
// Lo que tenga que hacer cuando no se reciben los datos
}
});
De esa manera, automáticamente, se añade un parámetro a la petición denominado callback. Es decir, es como si hubiéramos puesto en la URL: 'laDireccionQueSea.php?callback=una ristra de numerakos. Y ya donde envías el jsonp, lo que haces es lanzar una función que contiene el json si te llega ese parámetro. Por ejemplo, en PHP:
public function getDirecciones() {
if ( isset($_REQUEST['callback']) ) {
$callback = $_REQUEST['callback'];
$result = $this->miLibreria->getTodoDirecciones();
echo $callback . '('.json_encode($result).')';
}
}