2009-05-04 8 views
3

Lors de l'utilisation d'une requête XMLHTTPRequest en javascript, je souhaite l'envoyer à un site Web externe, plutôt que celui où le fichier .js est hébergé. Pour envoyer à Test.php sur le serveur actuel, j'utiliserComment spécifier un site Web externe pour XMLHTTPRequest

request.open("POST", "test.php", true); 

mais pour la deuxième arguemnt, comment dois-je envoyer à un autre site. "example.com/test.php" recherche un fichier sur le serveur actuel, et "http://example.com/test.php" justseems pour échouer purement et simplement.

+0

Pour clarifier votre question, peu importe où le fichier JS est hébergé. Ce qui compte, c'est l'endroit où la page * référençant * votre fichier JS est hébergée. * C'est * ce qui détermine la même origine. – EricLaw

Répondre

7

Vous ne pouvez pas, pour des raisons de sécurité. Voir le same origin policy pour JavaScript.

Il existe certaines solutions de contournement qui exploitent les bogues de navigateur ou les cas de coin, mais leur utilisation n'est pas recommandée. La meilleure approche consiste à avoir un proxy côté serveur qui reçoit les requêtes Ajax et, à son tour, envoie des requêtes HTTP aux autres serveurs. Cela devrait être soigneusement mis en œuvre en désinfectant l'entrée et en mettant en liste blanche les types de demandes qui sont envoyés, et les serveurs qui sont contactés.

1

Vous ne pouvez pas (pour la plupart) utiliser XmlHttpRequest pour obtenir des données d'un site Web externe. Ce que vous pouvez faire, cependant, est de créer dynamiquement un tag SCRIPT et de référencer une adresse externe. jQuery enveloppe cette fonctionnalité dans le cadre de sa gestion ajax.

1

En effet vous pouvez. Pas dans n'importe quel navigateur bien.

Dans Internet Explorer 8.0, il existe XDomainRequest, un objet permettant des requêtes interdomaines. Vous devez traiter correctement la requête effectuée avec cet objet sur le serveur en envoyant d'abord l'en-tête Access-Control-Allow-Origin avec "*" ou le nom de domaine du demandeur.

Puisque vous faites des choses hacky de toute façon, pourquoi ne pas essayer de l'utiliser sur IE8 en premier?

1

Si vous avez le contrôle sur le serveur, vous pouvez utiliser cet en-tête dans la réponse HTTP, bien que cela puisse ne pas fonctionner avec tous les navigateurs.

Access-Control-Allow-Origin: * 
Questions connexes