JavaScript, JSONP и чтение XML из междомена - PullRequest
3 голосов
/ 07 апреля 2011

в моем проекте JS мне нужно загрузить данные из междоменной области. (JavaScript находится в домене A, данные поступают из домена B)

У меня есть решение, которое использует JSONP , но мне действительно нужно вместо этого загрузить XML (обычный список воспроизведения музыки XML). Основная цель - иметь возможность загружать и анализировать данные XML без необходимости сначала изменять их в каком-либо другом формате (например, JSONP).

Это совершенно невозможно? Или есть какие нибудь обходные пути или хаки?

Я ориентируюсь в основном на последние браузеры, в основном на iOS.

Спасибо!

PS: Может ли easyXDM помочь? Или это не относится к XML?

ОБНОВЛЕНИЕ: к сожалению, я не могу использовать прокси, я действительно спрашиваю о прямом решении.

Ответы [ 4 ]

2 голосов
/ 08 апреля 2011

Вы можете сделать это полностью, просто ваш домен B возвращает что-то вроде

func("<myxml></myxml>");

или

var someVar = "<myxml></myxml>";

Имя JSONP на самом деле не имеетничего общего с JSON, поскольку его концепция заключается в выполнении JavaScript, в котором ваши данные встроены в код.

Как только ваш домен B возвращает ровно одну из этих двух форм выше, домен A может просто использовать его либоделать:

<script>
function func(xmlString) {
    alert(xmlString); // you can parse the xmlString with 
                      // jQuery or something else
}
</script>

или, если вы используете второй пример:

<script>
alert(someVar);
</script>
1 голос
/ 05 октября 2011

Вся идея JSONP заключается в том, что ответ должен быть исполняемым как скрипт .Так что вы можете передавать данные XML обратно, если это допустимый Javascript - например, сервер может заключить свой ответ в строку:

myCallback('<xml><stuff/></xml>')

, и вам придется анализировать их с помощью jQuery:

success: function(data) { 
    var xml = $(data); // now do stuff 
}

Это предполагает, что вы контролируете другой сервер и / или кого-то, кто заинтересован в форматировании своих данных таким образом.В противном случае вам не повезло, и вам нужен какой-то прокси - вы можете сделать это с YQL .

1 голос
/ 08 апреля 2011

Если у вас есть решение JSON-P, вы можете просто передать XML в обратный вызов JSON-P в виде строки. Затем вы можете выполнить синтаксический анализ строки переменной в JavaScript

1 голос
/ 07 апреля 2011

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

Упрощенный способ - датьскрипт, URL-адрес которого вам нужны данные:

http://example.com/proxy.php?url=http%3A%2F%2Fexample.org%2Fajax%3Fid%3D123 получает данные от http://example.org/ajax?id=123

Однако это может быть использовано неправильно, если вы разрешите любой URL-адрес подобным образом, поэтому вам следуетваш сценарий, убедитесь, что он на самом деле получает данные только с определенного URL.

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

http://example.com/proxy.php?id=123 для доступа http://example.org/ajax?id=123.

...