Question

Je comprends (je pense) que les objets XMLHttpRequest adhèrent à la politique « du même domaine ». Cependant, je veux créer un simple (POC) fichier HTML local qui télécharge XML à partir d'un serveur Web et fait quelque chose avec elle (nous allons commencer par une « alerte () » simple).

Est-il possible? Ai-je besoin d'une option de configuration de Firefox spéciale?

Le serveur à partir duquel je suis en train de télécharger est pas sous mon contrôle (il est en fait une API Google).

Ma tentative simple, le code de page "Utilisation XMLHttpRequest" de Mozilla . Il renvoie une erreur que je ne comprends pas vraiment de la méthode « envoyer ».

Disclaimer:. Je suis principalement un C / C ++ développeur - jamais fait de programmation JS sérieux, jamais essayé d'utiliser ces API

Était-ce utile?

La solution

XMLHttpRequest adhère effectivement à une mise en œuvre plus stricte de la même politique de domaine: alors que vous pouvez définir la propriété document.domain pour permettre JavaScript servi de deux sous-domaines de parler les uns avec les autres, vous ne pouvez pas le faire avec XMLHttpRequestObject. Dans votre cas, aller à un tout autre domaine, on ne peut pas le faire avec JavaScript soit.

Il y a deux options. Tout d'abord, vous pouvez utiliser un proxy inverse pour le faire apparaître que le site externe est un sous-domaine de votre site. Jetez un oeil à mod_proxy d'Apache, en particulier ProxyPassReverse

Une autre alternative consiste à renvoyer des données comme un objet JSON:

Autres conseils

Si le fichier XML que vous essayez de récupérer est retourné par l'un des API JS Google, alors il n'y a pas besoin de XMLHttpRequest (puisque ce ne peut être utilisé sur le même domaine que votre page anway).

Ainsi, dans le cas d'utilisation d'une API Google, comme Maps un, commencent habituellement par l'ajout d'une référence à leur API commune quelque part sur votre page:

<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>

Ensuite, ajoutez une référence à l'API spécifique (s) que vous souhaitez utiliser à votre page:

<script type="text/javascript">google.load("maps", "2");</script>

Maintenant, vous pouvez appeler les différentes fonctions offertes par cette API:

<script type="text/javascript">
  function initialize() {
    var map = new google.maps.Map2(document.getElementById("map"));
    map.setCenter(new google.maps.LatLng(41.86, 87.68), 13);
  }
  google.setOnLoadCallback(initialize);
</script>

Non XmlHttpRequest nécessaire:)

Vous pouvez utiliser JSONP pour ce faire. Je le fais ici en utilisant jQuery et PHP. Fondamentalement, j'utilise le proxy PHP pour envelopper la réponse JSON si jQuery peut le manipuler. Il est sous BSD.

Vous pouvez également essayer en utilisant IE8. Si vous exécutez à partir du disque et non un site Web IE8 ignore toutes les restrictions de domaine normal et obtenir les données que vous voulez.

Avec jQuery (et probablement XHR, mais j'essaie de ne pas l'utiliser directement), vous pouvez heureusement faire des demandes inter-domaines, à condition que vous ne spécifiez pas les en-têtes inhabituels ou des méthodes non-GET. Si vous ne voulez utiliser ceux-ci, vous devez avoir le contrôle du serveur pour activer les requêtes d'options.

Voir https://developer.mozilla.org/En/HTTP_access_control pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top