getJSON: почему 1 пример работает, а другой нет? - PullRequest
4 голосов
/ 17 февраля 2010

У меня есть 2 примера функции, которая извлекает данные json и выдает предупреждение.

В этом примере все идет хорошо: http://jsbin.com/uwupa3/edit

$(document).ready(function(){
  var timeService = "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?";

  $.getJSON(timeService, function(data) {
    alert(data);
  });
});

Но во втором примере предупреждение не отображается. Зачем? Единственное отличие - это сервис, в котором извлекается json. JSON-объект выглядит для меня совершенно корректно: http://jsbin.com/uwupa3/2/edit

$(document).ready(function(){
  var timeService = "http://json-time.appspot.com/time.json?tz=Europe/Brussels";

  $.getJSON(timeService, function(data) {
    alert(data);
  });
});

Я не получаю JS-ошибок. Я также попробовал этот локальный (не на JSbin, а с htm-файлом на моем компьютере), и это тоже не работает.

Может кто-нибудь объяснить, что я делаю не так?

Ответы [ 2 ]

8 голосов
/ 17 февраля 2010

Вы используете URL, который находится за пределами вашего домена, что означает, что $.getJSON не будет использовать XmlHttpRequest, но некоторые JSONP - см. Документацию $.getJSON:

Если указанный URL находится на удаленном сервер, запрос обрабатывается как JSONP вместо. Смотрите обсуждение тип данных jsonp в $.ajax() для более подробная информация.


И если вы посмотрите документацию опции jsonp для $.ajax, вы увидите:

Переопределить имя функции обратного вызова в запрос JSONP. Это значение будет используется вместо «обратного вызова» в "Обратный вызов =? часть строки запроса в URL для получения или данных для СООБЩЕНИЕ. Так что {jsonp: 'onJsonPLoad'} будет результат в 'onJsonPLoad =?' перешел к сервер.

А для опции jsonpCallback:

Укажите имя функции обратного вызова для запрос JSONP. Это значение будет используется вместо случайного имени автоматически генерируется jQuery.

Для вашего первого запроса в URL есть параметр jsoncallback; для вашего второго запроса такого параметра нет:

Полагаю, это как-то связано с тем, что второй запрос не делает то, что вы хотите?

1 голос
/ 12 января 2012

Вы используете URL, который находится за пределами вашего домена, что означает, что $.getJSON не будет использовать XmlHttpRequest, но некоторые JSONP - см. Документацию $ .getJSON:

Если указанный URL находится на удаленном сервере, запрос обрабатывается как JSONP вместо. Смотрите обсуждение типа данных jsonp в $ .ajax () для более подробной информации.

И если вы посмотрите документацию по опции jsonp для $ .ajax, вы увидите:

Переопределить имя функции обратного вызова в запросе jsonp. Это значение будет использоваться вместо 'callback' в 'callback =?' часть Строка запроса в URL для GET или данные для POST. Так {jsonp: 'onJsonPLoad'} приведет к 'onJsonPLoad =?' перешел к сервер.

А для опции jsonpCallback:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...