2009-11-19 9 views
10

J'ai un site Web qui utilise XMLHttpRequest (jQuery, en fait). J'ai également un autre site fonctionnant sur le même serveur, qui sert un fichier de script qui rend les demandes XHR à ce site, à savoir.Puis-je utiliser XMLHttpRequest sur un port différent d'un fichier de script chargé à partir de ce port?

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

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

et http://mysite:9000/otherscript.js comprend

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

Le problème est - cela ne fonctionne pas. Les requêtes AJAX du script chargé échouent simplement sans message d'erreur. De ce que j'ai pu trouver c'est l'ancienne même politique d'origine. Étant donné que je contrôle les deux sites, y a-t-il quelque chose que je puisse faire pour que cela fonctionne? Le truc "document.domain" ne semble pas faire quoi que ce soit pour XMLHttpRequest.

Répondre

10

Non-ne peut pas faire cela avec XHR. La politique du même domaine est très restrictive, même hôte, même port, même protocole. Pardon! Vous devrez recourir à d'autres astuces (iframes, manipulation de titre, etc) pour le faire fonctionner.

+0

Qu'est-ce que la «manipulation de titre»? – EMP

+0

Si vous avez signé javascript, vous pouvez le faire sur FF. – bmargulies

+2

Voir http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/ et http://orensol.com/2009/06/07/cross-domain-ajax-calls-and -iframe-communication-how-to/pour des exemples. Il y a des addons jQuery et dojo qui enveloppent bien ces choses. – nitzmahone

10

vous pouvez le faire en ajoutant Access-Control-Allow-Origin en-tête. Si vous utilisez php

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

ou dans Node.js

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

cela doit faire l'affaire pour u il fonctionne toujours pour moi

0

Je viens de résoudre un problème similaire avec PHP service que je suis en train de jouer avec (pas sûr à quel point une solution PHP est directement à ceci, mais ...) en faisant une seule ligne PHP page, SimpleProxy.php:

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

Et dans mon XMLHttpRequest j'utilise 'SimpleProxy.php' à la place de 'http://localhost:4567', qui met effectivement la demande sur le même domaine que mon code .js.