jQuery AJAX cross domain

Aquí hay dos páginas, test.php y testserver.php.

test.php

<script src="scripts/jq.js" type="text/javascript"></script>
<script>
    $(function() {
        $.ajax({url:"testserver.php",
            success:function() {
                alert("Success");
            },
            error:function() {
                alert("Error");
            },
            dataType:"json",
            type:"get"
        }
    )})
</script>

testserver.php

<?php
$arr = array("element1",
             "element2",
             array("element31","element32"));
$arr['name'] = "response";
echo json_encode($arr);
?>

Ahora mi problema: cuando ambos archivos están en el mismo servidor (ya sea localhost o servidor web), funciona y se llama a alert("Success"); si está en diferentes servidores, es decir testserver.php en el servidor web y test.php en localhost, no funciona, y se ejecuta `alert("Error". Incluso si la URL dentro de ajax se cambia a http://domain.com/path/to/file/testserver.php

Solución

Utilice [JSONP][1].

jQuery:


$.ajax({
     url:"testserver.php",
     dataType: 'jsonp', // Notice! JSONP 
Comentarios (11)

Tiene que echar un vistazo a la Política del mismo origen:

En informática, la política del mismo origen

es un concepto de seguridad importante para un número de lenguajes de programación del lado del navegador lenguajes de programación del lado del navegador, como JavaScript. La política política permite que los scripts que se ejecutan en páginas que se originan en el mismo sitio acceder a los métodos y propiedades de los demás propiedades sin restricciones específicas restricciones, pero impide el acceso a la mayoría de los métodos y propiedades entre páginas en diferentes sitios.

Para que pueda obtener datos, tiene que ser:

El mismo protocolo y host

Tienes que implementar JSONP para solucionarlo.

Comentarios (1)

La seguridad del navegador impide hacer una llamada ajax desde una página alojada en un dominio a otra alojada en un dominio diferente; esto se llama la "política del mismo origen]1".

Comentarios (1)