2009-11-19 16 views
10

Tengo un sitio web que usa XMLHttpRequest (jQuery, en realidad). También tengo otro sitio ejecutándose en el mismo servidor, que sirve un archivo de script que hace que las solicitudes XHR vuelvan a ESE sitio, es decir.¿Puedo usar XMLHttpRequest en un puerto diferente de un archivo de script cargado desde ese puerto?

http://mysite:50000/index.html incluye

<script src="http://mysite:9000/otherscript.js"></script> 

y http://mysite:9000/otherscript.js incluye

$.ajax({ 
    url: 'http://mysite:9000/ajax/stuff' 
}); 

El problema es - esto no funciona. Las solicitudes AJAX del script cargado simplemente fallan sin mensaje de error. Por lo que he podido encontrar, esta es la misma política de origen anterior. Dado que controlo ambos sitios, ¿hay algo que pueda hacer para que esto funcione? El truco de "document.domain" no parece hacer nada por XMLHttpRequest.

Respuesta

10

No, no se puede hacer esto con XHR. La política del mismo dominio es muy restrictiva: el mismo host, el mismo puerto y el mismo protocolo. ¡Lo siento! Tendrás que recurrir a otros trucos (iframes, manipulación de títulos, etc.) para que funcione.

+0

¿Qué es el truco de "manipulación del título"? – EMP

+0

Si ha firmado javascript, puede hacerlo en FF. – bmargulies

+2

Ver http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/ y http://orensol.com/2009/06/07/cross-domain-ajax-calls-and -iframe-communication-how-to/for examples. Hay complementos jQuery y dojo que envuelven estas cosas muy bien. – nitzmahone

10

Usted puede hacer esto mediante la adición de Access-Control-Allow-Origin cabecera. Si está utilizando php

header("Access-Control-Allow-Origin: http://example.com"); 

o en Node.js

response.writeHead(200,{'Access-Controll-Allow-Origin':' http://example.com'}); 

esto debe hacer el truco para u siempre funciona para mí

0

simplemente he resuelto un problema similar con un PHP servicio con el que estoy jugando actualmente (no estoy seguro de cuán relevante es una solución PHP para esto directamente, pero ...) haciendo una sola página proxy de línea PHP, SimpleProxy.php:

<?php 
echo file_get_contents('http://localhost:4567'); 
?> 

Y en mi XMLHttpRequest utilizo 'SimpleProxy.php' en lugar de 'http://localhost:4567', que pone efectivamente la solicitud en el mismo dominio que mi código de Js.

Cuestiones relacionadas