2010-06-28 22 views
9

Tengo un servidor ubicado en example.com que ejecuta apache, que sirve mis archivos html estáticos.Llamadas de Ajax al subdominio

También tengo un servicio json ubicado en api.example.com ejecutando python con cherrypy.

El usuario solicita example.com y obtiene la página html de índice. En esa página hago una solicitud de Ajax con jquery al servicio json. document.domain vuelve example.com

 $.ajax({ 
     type: 'GET', 
     url: 'http://api.example.com/resource/', 
     dataType: 'json', 
     success: successCallback, 
     error: errorHandler 
    }); 

Sin embargo, no puede ver el cuerpo de la respuesta de la petición Ajax en Firebug. Esto me lleva a creer que el navegador (FF) no es compatible con esto.

¿Cuáles son los mejores métodos para lograr esto? Preferiría no utilizar ningún proxy en el backend de Apache para example.com, si es posible.

+0

Subdominio diferente = dominio diferente –

+0

Sí. Pero example.com es el dominio principal de api.example.com, por lo que la relación entre estas direcciones URL debe ser padre - hijo no hijo - hijo. – Baversjo

Respuesta

4

También puede usar JSONP agregando callback =? hasta el final de la url. jQuery ya sabe cómo manejar este tipo de solicitudes, pero requiere algunos cambios del lado del servidor para manejar el parámetro de devolución de llamada.

0

Hasta donde yo sé, no se puede hacer el dominio cruzado AJAX.

Why is cross-domain Ajax a security concern?

Aunque supongo que se podría hacer una solución IFRAME

Cross Sub Domain Javascript

+2

pero no es un dominio cruzado – Baversjo

+0

Supongo que podría hacer una solución alternativa de IFRAME http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/ – SAGExSDX

+1

De acuerdo con la misma política de origen , es un dominio diferente: http://en.wikipedia.org/wiki/Same_origin_policy – wsanville

0

petición AJAX sólo se admite en el mismo dominio. Sin embargo, puede escribir un proxy HTTP en su lenguaje de scripting preferido y realizar llamadas a ese proxy HTTP. Puede consultar este pequeño tutorial en un proxy AJAX escrito en php.

+0

Usar proxy no es una buena solución para aplicaciones de gran escala. –

-1

Utilice document.domain para hacer que el dominio sea el dominio de nivel superior en lugar del subdominio.

document.domain="example.com" 

Esto es described in detail en MDN.

+0

Ya está configurado en el dominio de nivel superior como se describe anteriormente – Baversjo

+3

document.domain solo funciona para iframes, no solicitudes de ajax – Nathan

0

trate de cambiar su dominio en su subdominio, como este

<script type="text/javascript">  
    document.domain = 'example.com'; 
</script> 

si no funciona, cambiar su document.domain en su página de dominio también.

Cuestiones relacionadas