Нужна помощь с получением междоменного XML с JavaScript - PullRequest
1 голос
/ 11 октября 2009

Хорошо, поэтому я создаю веб-приложение, которое предоставляет информацию о музыке (то есть информацию об исполнителях, альбомах, песнях и т. Д.), А для источника информации я использую API MusicBrainz.

Теперь я пытаюсь загрузить данные из вызова API и обработать их с помощью jQuery. Это код, который я использую:

Code:
queryString="http://musicbrainz.org/ws/1/artist/?type=xml&name="+qry+"&limit=10"; 
$.ajax({url: queryString, dataType: ($.browser.msie) ? "text" : "xml", success: function(data){ 
      alert("success"); 
      var xml; 
      if (typeof data == "string") { 
             xml = new ActiveXObject("Microsoft.XMLDOM"); 
             xml.async = false; 
             xml.loadXML(data); 
        } else { 
             xml = data; 
        }; 
...

Когда «queryString» является строкой URL для запроса, а затем я продолжу считывать данные из объекта «xml». Довольно простой.

Однако здесь возникают проблемы. Код работает безупречно при локальном запуске на моем компьютере, но не работает вообще, когда я загружаю все на свой веб-сервер и пытаюсь запустить его там. Я немного почитал и обнаружил, что вызовы AJAX не могут выполняться в разных доменах из-за проблем безопасности.

Итак, я ознакомился с многочисленными решениями, но почти всем требуется либо что-то с PHP (о котором я абсолютно ничего не знаю), либо сбор данных в формате JSON (который, очевидно, не подчиняется тем же ограничениям безопасности). Однако моя главная проблема заключается в том, что API MusicBrainz не возвращает данные в формате JSON (фактически единственный формат, который он возвращает, - это XML).

Так что, в любом случае, мне было просто интересно, может ли кто-нибудь дать мне некоторую помощь или указатели, если и как я могу получить этот удаленный XML-файл, используя только JS / jQuery. Или, укажите мне на другой метод, который может быть реализован с помощью полного PHP-новичка, такого как я.

Спасибо за любую помощь!

Ответы [ 2 ]

4 голосов
/ 11 октября 2009

Вам требуется что-то на стороне вашего сервера для передачи вашего запроса на этот другой сервер. URL, который выглядит как:

/proxy?url=http%3A//musicbrainz.org/ws/1/artist/%3Ftype%3Dxml%26name%3Dexample%26limit%3D10

Если на вашем сервере доступен PHP, вы можете в Google найти общий прокси-скрипт PHP.


РЕДАКТИРОВАТЬ Вот пример очень простого PHP-скрипта, который будет извлекать указанный URL:

<?php readfile($_GET['url']) ?>

Обратите внимание, что вы не сможете помещать в него какие-либо данные или указывать Content-Type. Это самый простой прокси-сервер, необходимый для самых базовых нужд.


Я понимаю, что JSON сейчас не вариант, но, тем не менее, вот объяснение того, почему он может работать для междоменных запросов.

JSON, являющийся Javascript, может запрашиваться с использованием тега <script> вместо XMLHttpRequest. Поскольку тег <script> не имеет того же ограничения для междоменного запроса, таким способом можно получить содержимое JSON.

Этот метод называется JSONP и реализован в jQuery в функции getJSON .

0 голосов
/ 24 апреля 2012

Если вы не хотите настраивать собственный прокси-сервер, посмотрите мой ответ здесь: используйте jsonp для получения кросс-домена xml

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