ValeriyKr
@ValeriyKr
Викинг

Как обработать JSON-данные, которые на самом деле XML?

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



$.get('http://ipgeobase.ru:7020/geo?ip=89.107.39.118', function(data) {	
//тут как-то я получаю myregion из ответа 
}, 'jsonp');




Ответ сервера в формате XML:

<?xml version="1.0" encoding="windows-1251"?>
<ip-answer>
<ip value="89.107.39.118"><inetnum>89.107.32.0 - 89.107.39.255</inetnum><country>RU</country><city>Ессентуки</city><region>Ставропольский край</region><district>Северо-Кавказский федеральный округ</district><lat>44.049809</lat><lng>42.857239</lng></ip>
</ip-answer>




На что браузер отвечает «Uncaught SyntaxError: Unexpected token < », как я понимаю, не в силах обработать угловую скобку. Я смог бы извлечь из этого ответа нужные данные. Но как заставить браузер их принять без ошибки? Может можно обработать ответ до встроенного парсинга?
  • Вопрос задан
  • 5095 просмотров
Решения вопроса 1
RUVATA
@RUVATA
Разработчик, гик, меломан, разгильдяй
Я чего-то не понимаю, или
 function httpGet(theUrl)
    {
    var xmlHttp = null;
 
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false );
    xmlHttp.send( null );
    return xmlHttp.responseText;
    }


и парсим responseText,
не?
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@kxyu
Чтобы jsonp заработал, нужна поддержка со стороны сервера — возвращаемый результат должен быть валиндным javascript-кодом, обычно это вызов функции с данными в качестве аргумента, имя функции передается серверу в виде get-параметра. Будут ли данные json или xml по сути не важно — в данном случае просто сервис не поддерживает такой вариант взаимодействия — выберите другой, например:
http://freegeoip.net/json/89.107.39.118?callback=callback
Ответ написан
timokhin
@timokhin
iOS developer
тут есть три варианта:
1) сделать на бэкэнде «проксю». Т.е. аяксом дергать свой бэкэнд, а тот в свою очередь дернет ipgeobase
2) заморачиваться со старинными способами «аякса» (iframe, и т.п.)
3) попробовать сконтачить с ipgeobase и попросить их отдавать правильный заголовок Access-Control-Allow-Origin
Ответ написан
Комментировать
JustLuckyGuy
@JustLuckyGuy
заменить 'jsonp' на 'xml'?

вообщем, смотрите маны по $.get. Не знаю, что у вас за библиотека.
Ответ написан
ertaquo
@ertaquo
А почему бы вам не указать вместо JSONP формат XML?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы