Это допустимая разметка JSON?

Я пытаюсь получить некоторую информацию с российского веб-сайта доставки. Будучи n00b для JSON/Jquery/Internets, я застрял, получая данные в формате json.

Следуя API компании, перехожу по URL: http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1

Это возвращает:

json({
  "rsp": {
    "stat": "ok",
    "price": "750",
    "term": {
      "min": 5,
      "max": 9
    }
  }
})

Следуя документам Jquery, я пробовал:

<script>
$.getJSON("http://emspost.ru/api/rest/?callback=json&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
  function(data) {
    alert(data);
  });
</script>

Это возвращает ноль. Любая идея, что я делаю неправильно?


person jdkealy    schedule 26.06.2010    source источник
comment
см. stackoverflow.com/questions/3113924/   -  person Anurag    schedule 26.06.2010


Ответы (2)


Вместо этого используйте callback=?, например:

$.getJSON("http://emspost.ru/api/rest/?callback=?&method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1",
function(data){
  alert(data);
});

Затем вы получите свой объект в предупреждении :) JSONP работает, беря этот обратный вызов в строке запроса и вызывая эту функцию (которой не существует, если только вы не сделали function json() {}, когда она возвращается. Когда вы делаете ?callback=?, jquery динамически называет это success функция, которую вы дали $.getJSON() и заменяет ее, например: ?callback=FunctioNameGiven, так что она действительно будет работать правильно.

Если вы думаете о том, как это работает, это в основном:

<script type="text/javascript">
  //returned javascript here, e.g. FunctioNameGiven({ object data });
</script>

Это делается для того, чтобы это был GET-запрос, а не ограниченный правилами политики одного и того же источника, именно так работает JSONP, когда обычный JSON-запрос блокируется :)

person Nick Craver    schedule 26.06.2010
comment
Я хотел бы добавить, что '?' mark требуется, чтобы активировать поддержку JSONP в jQuery... если он опущен, jQuery не будет знать, что это JSONP, и попытается получить данные, как если бы это были обычные запросы JSON, которые не будут работать. - person chakrit; 26.06.2010
comment
@chakrit - Хороший вопрос, я бы добавил оговорку, это верно для $.getJSON(), но не для jQuery в целом (хотя это самый простой маршрут), например: jsfiddle.net/jF6yj - person Nick Craver; 26.06.2010

Вы используете функцию обратного вызова (callback=json), которая запускает функцию json при загрузке.

Вместо этого попробуйте ПОЛУЧИТЬ это:

http://emspost.ru/api/rest/?method=ems.calculate&from=city--abakan&to=city--anadyr&weight=1

Кстати, ваш запрос междоменный? Если да, то xhr не рекомендуется.

person tcooc    schedule 26.06.2010