кросс-сайт XmlHttpRequest в Firefox? - PullRequest
       41

кросс-сайт XmlHttpRequest в Firefox?

3 голосов
/ 25 декабря 2008

Я понимаю (я думаю), что объекты XmlHttpRequest придерживаются политики "того же домена". Однако я хочу создать простой (POC) локальный HTML-файл, который загружает XML с веб-сервера и что-то с ним делает (начнем с простого «alert ()»).

Возможно ли это вообще? Нужен ли мне специальный параметр конфигурации Firefox?

Сервер, с которого я пытаюсь скачать, не под моим контролем (на самом деле это API Google).

Моя простая попытка - это код из страницы Mozilla "Using XMLHttpRequest" . Он возвращает ошибку, которую я не совсем понимаю из метода "send".

Отказ от ответственности: я в основном разработчик C / C ++ - никогда не занимался серьезным программированием на JS, никогда не пытался использовать эти API.

Ответы [ 5 ]

3 голосов
/ 25 декабря 2008

XMLHttpRequest фактически придерживается гораздо более строгой реализации той же политики домена: хотя вы можете установить свойство document.domain, чтобы разрешать JavaScript, обслуживаемому из двух поддоменов, общаться друг с другом, вы не можете сделать это с XMLHttpRequestObject. В вашем случае, перейдя в совершенно другой домен, вы также не сможете сделать это с помощью JavaScript.

Есть несколько вариантов. Во-первых, вы можете использовать обратный прокси, чтобы создать впечатление, что внешний сайт является поддоменом вашего сайта. Взгляните на mod_proxy Apache, в частности ProxyPassReverse

Другая альтернатива - возвращать данные в виде объекта JSON: может извлекать любые данные из любой точки мира. Недостатком этого является то, что он не (легко) повторяется (как в нескольких запросах с одной страницы).

Я также рекомендую вам использовать Google в качестве "google mashups". Большинство из них живут в домене googlemashops.com, что значительно упрощает их реализацию. Некоторые живут за пределами этой области и могут дать вам некоторые идеи.

Редактировать: вместо непосредственного использования объекта XMLHttpRequest я рекомендую обратиться к сторонней библиотеке, такой как prototype.js

1 голос
/ 28 сентября 2009

Вы можете использовать JSONP для этого. Я делаю это здесь , используя jQuery и PHP. В основном я использую прокси-сервер PHP, чтобы обернуть JSON-ответ, чтобы jQuery мог его обработать. Это под BSD.

1 голос
/ 25 декабря 2008

Если XML, который вы пытаетесь получить, возвращается одним из API-интерфейсов Google JS, тогда XmlHttpRequest не требуется (так как он может использоваться только в том же домене, что и ваша страница).

Так что в случае использования API Google, такого как Maps, обычно начинайте с добавления ссылки на их общий API где-то на вашей странице:

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

Затем добавьте ссылку на конкретные API, которые вы планируете использовать на своей странице:

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

Теперь вы можете вызывать различные функции, предоставляемые этим 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>

XmlHttpRequest не требуется:)

0 голосов
/ 21 января 2012

С помощью jQuery (и, вероятно, XHR, но я стараюсь не использовать его напрямую) вы можете успешно выполнять междоменные запросы, если вы не укажете необычные заголовки или не-GET методы. Если вы хотите использовать их, вы должны иметь контроль над сервером, чтобы включить запросы OPTIONS.

Подробнее см. https://developer.mozilla.org/En/HTTP_access_control.

0 голосов
/ 28 сентября 2009

Или попробуйте использовать IE8. Если вы работаете с диска, а не с веб-сайта, IE8 проигнорирует все обычные ограничения домена и получит необходимые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...