Существует ли существующий инструмент для jsonp, например извлечение xml в jquery? - PullRequest
8 голосов
/ 20 апреля 2010

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

Поскольку это междоменный запрос, я решил использовать jsonp, так как он кажется стандартом де-факто для таких API-интерфейсов. Однако для моего приложения было бы проще использовать xml вместо json. Теперь я могу, конечно, преобразовать мой xml в json на сервере, а затем снова вернуться в xml в javascript сайта клиента, но это кажется излишне громоздким. Что мне действительно нужно, так это решение xmlp, xml с отступами.

Я устал гуглить, но не смог найти плагин jquery, который это делает. Кто-нибудь знает простое решение?

Ответы [ 3 ]

5 голосов
/ 20 апреля 2010

Вы можете использовать что-то вроде Yahoo! Язык запросов (YQL), чтобы избавить вас от необходимости писать другой выходной формат для вашего XML-файла.

Например, чтобы получить XML-канал для этого вопроса через JSONP-X, вы должны использовать URL-адрес YQL-запроса, например:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%27http%3A%2F%2Fstackoverflow.com%2Ffeeds%2Fquestion%2F2671143%27%20and%20itemPath%3D%27feed.entry%27&callback=my_jsonpx_handler

[ Попробуйте этот запрос в консоли YQL ]

Что дает вам результат, подобный следующему; эффективно XML, завернутый в обратный вызов JSON:

my_jsonpx_handler({"query":…,"results":["<entry xmlns=\"http://www.w3.org/2005/Atom\">\n <id>/2054589/suschestvuet-li-suschestvuyschii-instrument-dlya-jsonp-naprimer-izvlechenie-xml-v-jquery<\/id>\n <re:rank xmlns:re=\"http://purl.org/atompub/rank/1.0\" scheme=\"http://stackoverflow.com\">0<\/re:rank>…"]});

Затем ваши виджеты могут запросить URL-адрес YQL для получения своих данных, которые, в свою очередь, будут взаимодействовать с файлом XML на вашем сервере (с кэшированием, скоростью и т. Д. В качестве добавленных плюсов).

4 голосов
/ 20 апреля 2010

Единственная причина, по которой работает json, заключается в том, что включенный javascript на вашей странице может работать в окне без проблем с x-доменом. Таким образом, он должен оставаться JavaScript. Однако вы можете просто минимизировать xml, убедиться, что он правильно экранирован, и отправить его в виде значения в объект json.

echo 'callback({data: "' + xml string + '"});';

Или что-то в этом роде.

1 голос
/ 25 октября 2011

Начиная с jQuery 1.5 есть служебный метод, он спас мне жизнь за использование jsonp для загрузки в XML.

var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",
xmlDoc = $.parseXML( xml ),
$xml = $( xmlDoc ),
$title = $xml.find( "title" );

http://api.jquery.com/jQuery.parseXML/

...