Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другой альтернативой является возврат данных в виде объекта JSON:<script src="foo"> can retrieve whatever data it wants from wherever it wants.Недостатком этого является то, что это не (легко) повторяется (как в нескольких запросах с одной страницы).

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

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

Другие советы

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

Таким образом, в случае использования Google API, например, карты, обычно начинается с добавления ссылки на их общий 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 не требуется :)

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

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

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

Видеть https://developer.mozilla.org/en/http_access_control Для деталей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top