Проблема с ответом getJSON - PullRequest
       0

Проблема с ответом getJSON

2 голосов
/ 23 сентября 2011

У меня возникла проблема с ответом $ .getJSON в Chrome

Запрос будет

$.getJSON("http://www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json?callback=?&points=55.77184,37.623553",
    function(json){
        <some code>
    }
);

, если вы перейдете по этой ссылке, вы получите текст в формате json.

Когда я запускаю этот запрос, Chrome показывает ошибку:

Ресурс интерпретируется как сценарий, но передается с приложением MIME-типа / json

SyntaxError: неожиданный токен: timezone.json: 1

Пытается ли он преобразовать ответ json в объект JavaScript?Если это так, почему он не может этого сделать?Есть ли способ решить эту проблему?

в отладчике Chrome я нашел файл "timezone.json" с таким содержанием:

{"code":0,"message":"ok","data":[{"timeZone":"Europe/Moscow","currentOffsetMs":14400000,"latitude":55.77184,"longitude":37.623553}]}

Ответы [ 3 ]

3 голосов
/ 23 сентября 2011

Сервер, с которого вы запрашиваете данные, не настроен для возврата JSONP.поэтому вам нужно создать какой-то прокси, чтобы получить данные для вас, или использовать YQL.

Редактировать:

Если бы вы использовали YQL, это URL, который вы бы использовали:

http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20json%20WHERE%20url%3D%22http%3A%2F%2Fwww.askgeo.com%2Fapi%2F428014%2Fsf2t36ujv1tsf325t5734gstr4%2Ftimezone.json%3Fpoints%3D55.77184%2C37.623553%22&format=json&diagnostics=true

и для получения информации о том, как я сгенерировал этот URL, посетите:

http://developer.yahoo.com/yql/console/#h=SELECT%20*%20FROM%20json%20WHERE%20url%3D%22http%3A//www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json%3Fpoints%3D55.77184%2C37.623553%22

Вы можете найти URL внизу.* Fiddle с использованием YQL: http://jsfiddle.net/JGwU3/1/

Однако есть один недостаток с использованием YQL.если результат содержит только один результат, его содержимое является объектом, однако, если оно кратно, его содержимое будет массивом.Вы можете увидеть разницу путем console.logging ответа.

0 голосов
/ 23 сентября 2011

В документации API говорится, что вы должны предоставить параметры запроса в отдельном объекте JSON в качестве второго аргумента.

$.getJSON('http://www.askgeo.com/api/428014/sf2t36ujv1tsf325t5734gstr4/timezone.json', {'callback':'', 'points': '55.77184,37.623553'}, function(json) {
  alert(json.data[0].timeZone);
});

Отлично работает, когда я его тестировал.

(Это полностью игнорирует JSONP)

0 голосов
/ 23 сентября 2011

РЕДАКТИРОВАТЬ

ОК, мой пост был ошибочным, это проблема JSONP.См. Эту страницу документации jQuery о том, как извлечь данные из URL: http://api.jquery.com/jQuery.ajax/

...