Что я должен сделать, чтобы обойти политику единого происхождения JavaScript для JSON ... И может ли это работать и для данных XML? - PullRequest
1 голос
/ 22 декабря 2010

У меня есть вопрос о той же политике происхождения ...

У меня есть код JavaScript с использованием данных JSON и XML. Я знаю, что мне нужно изменить JSON на JSONP, поскольку мой сервер находится в другом домене, но я делаю это только на стороне клиента? А как насчет данных XML? Это может также быть загружено междоменный как-то?

Наконец, есть ли хорошие сайты, объясняющие это всесторонне, с примерами?

Ответы [ 3 ]

0 голосов
/ 22 декабря 2010

Вы должны изменить сервер.Вы можете использовать принцип JSONP для XML.Вам просто нужно передать строку:

Например, предположим, что ваша серверная программа находится в / xmlp.Вы передаете параметр callback, затем сценарий оборачивает вывод XML в этот файл.

Например,

/xmlp?callback=mycall

output:

mycall('<root><el attr="value"/ ></root>');

Затем вы анализируете XML(передается в функцию JavaScript mycall) на стороне клиента.

0 голосов
/ 22 декабря 2010

Как только ваш источник данных находится в другом домене, вы должны использовать JSONP для получения данных.Это как для данных JSON, так и для XML.JSONP - это просто примечание, которое позволяет вам предоставить функцию обратного вызова, и она будет вызвана, как только удаленный вызов завершится.Данные предоставляются в качестве параметра обратного вызова.

Конечно, ваш API должен поддерживать JSONP, как только запрос к API содержит «? Callback = f», он должен возвращать что-то вроде

{ f(data); }

и f - функция, определенная где-то на вашей странице.

Итак, в основном, когда вызов API завершен, вызывается функция обратного вызова.

У вас есть несколько вариантов использования API из разных источников

  1. С YQL - http://developer.yahoo.com/yql/
  2. Вручную, чистый JS или с JQuery - http://www.beletsky.net/2010/07/json-jsonp-and-same-origin-policy-issue.html
0 голосов
/ 22 декабря 2010

Кодируйте ваш XML внутри ответа jsonp, а затем заставьте своего клиента извлечь его и интерпретировать как XML.

...