2009-11-19 9 views
10

Ho un sito Web che utilizza XMLHttpRequest (jQuery, in realtà). Ho anche un altro sito in esecuzione sullo stesso server, che serve un file di script che rende le richieste XHR a quel sito, ad es.Posso utilizzare XMLHttpRequest su una porta diversa da un file di script caricato da quella porta?

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

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

e http://mysite:9000/otherscript.js include

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

Il problema è - questo non funziona. Le richieste AJAX dallo script caricato semplicemente falliscono senza alcun messaggio di errore. Da quello che sono stato in grado di trovare questa è la vecchia stessa politica di origine. Dato che controllo entrambi i siti, c'è qualcosa che posso fare per farlo funzionare? Il trucco "document.domain" non sembra fare nulla per XMLHttpRequest.

risposta

10

No, non è possibile farlo con XHR. La politica dello stesso dominio è molto restrittiva nello stesso host, stessa porta, stesso protocollo. Scusate! Dovrai ricorrere ad altri trucchi (iframe, manipolazione del titolo, ecc.) Per farlo funzionare.

+0

Qual è il trucco della "manipolazione del titolo"? – EMP

+0

Se hai firmato javascript puoi farlo su FF. – bmargulies

+2

Vedere http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/ e http://orensol.com/2009/06/07/cross-domain-ajax-calls-and -iframe-comunicazione-come-per/per esempi. Ci sono addon jQuery e Dojo che avvolgono bene questa roba. – nitzmahone

10

è possibile farlo aggiungendo l'intestazione Access-Control-Allow-Origin. Se si utilizza PHP

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

o in node.js

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

questo deve fare il trucco per u funziona sempre per me

0

ho appena risolto un problema simile con un PHP servizio con cui sto attualmente giocando (non so quanto sia pertinente una soluzione PHP a questo direttamente, ma ...) creando una pagina PHP proxy a riga singola, SimpleProxy.php:

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

E nel mio XMLHttpRequest io uso "SimpleProxy.php" al posto di "http://localhost:4567", che pone effettivamente la richiesta nello stesso dominio del mio codice .js.

Problemi correlati