используйте jsonp для получения кросс-домена xml - PullRequest
9 голосов
/ 18 июня 2010

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

У меня немного гуглится и кажетсяэтот jsonp - путь вперед.Основываясь на некоторых примерах, которые я нашел здесь на stackoverflow и других сайтах, это то, что у меня есть, и оно не «поражает» сервер xml.Я могу просмотреть XML в браузере.

$(document).ready(function(){    
   $.ajax({
        type: 'GET',
        dataType: 'jsonp',                
        url: 'http://192.168.0.106:8111/getconfiguration?',
        success: function (xml) 
        { //do stuff with received xml 
        }});    

Есть предложения?пожалуйста, имейте в виду, что я новичок в отношении JS / JQuery; о)

Ответы [ 2 ]

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

Если у вас нет доступа к серверу (например, если вы используете API), вы можете использовать YQL , чтобы конвертировать XML в jsonp и запросить сервер Yahoo из браузераиспользуя пользовательский URL YQL (в который встроен SQL-подобный оператор).Вот пример (для API Zillow):

$('document').ready(function(){
  $.ajax({
    url: 'http://query.yahooapis.com/v1/public/yql?q=select * from zillow.search where address = "1835 73rd Ave NE" and citystatezip = "98039" and zwsid = "X1-ZWz1cse68iatcb_13bwv"&format=json&diagnostics=true&env=http://datatables.org/alltables.env&callback=mydata',
    jsonpCallback: "mydata",
    success: function(results) {
      console.log(results.query.results.searchresults.response.results.result.zpid);
    },
    dataType: 'jsonp'
  });
});
1 голос
/ 18 июня 2010

Если у вас есть доступ к коду, генерирующему XML на удаленном сервере, вы можете обернуть все это в jsonp.

JSONP - это способ обойти политику одного и того же происхождения, получая данные с помощью тегов <script>, а не пытаясь удаленно извлечь информацию.

в вашем getconfiguation скрипте вы бы получили что-то вроде

callback("SERVER GENERATED XML/JSON DATA GOES HERE");

, где обратный вызов определяется удаленным вызовом

Например, если ваш удаленный скрипт был php, вы бы сделали его похожим на это:

<?php
// getconfiguration.php
echo "$_GET['callback']($configuration_data);"
?>

Затем запустите AJAX, который вы указали в своем вопросе. Что это на самом деле делает, так это динамически вставляет тег скрипта на вашу страницу следующим образом:

<script src="http://192.168.0.106:8111/getconfiguation.php?callback=???"></script>

JQuery заполняет в ??? для вас с какой-то уникальной оболочкой, сгенерированной для вашего успешного обратного вызова

...