0

Собственно, пытаюсь запарсить объект и получаю undefined.

function iataToCity(iata) {
    return $.getJSON('http://api.travelpayouts.com/data/cities.json')
 .then(function(cities){
  if(cities) {
   for (var city in cities) {
    if (cities[city].code && cities[city].code == iata) {
     return cities[city].name_translations.ru;
    }
   }
  } else {
   console.log('Error occured while trying to parse cities.json');
  }
 });
};

$(function(){ $('body').append('<div>'+ iataToCity('IEV') + '</div>'); });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body></body>

В чём проблема? Обычно распарсить json таким образом получается.

  • К слову iata - это что такое?) – Утка Учится Укрываться Dec 28 '16 at 13:13
  • @УткаУчитсяУму аргумент функции. Разве нет? – JamesJGoodwin Dec 28 '16 at 13:16
  • @JamesJGoodwin, это претензия к стилю именования прост. Почему не работает - написал Grundy, читайте пост по ссылке и думайте. – Утка Учится Укрываться Dec 28 '16 at 13:18
  • 1
    @УткаУчитсяУму, судя по всему это The International Air Transport Association (IATA). А значение параметра: Коды ИАТА – Grundy Dec 28 '16 at 13:18
  • @УткаУчитсяУму, там в принципе могут быть авиакомпании, самолеты, но в данном случае скорее всего страны – Grundy Dec 28 '16 at 13:20
  • @Grundy города(регионы), если быть точнее. Прочёл ответ по ссылке, но всё равно не понимаю, в чём проблема. – JamesJGoodwin Dec 28 '16 at 13:25
  • @JamesJGoodwin, смотрите, Вы вставляете в dom результат выполнения функции. У вашей функции результата - нету (то есть нет return, не возвращает она ничего). Это первая проблема. Просто так написать return Вы не можете, так как функция асинхронна (результат будет не сразу. Нет, подождать его нельзя). Для того понять что делать и нужна ссылка приведенная Grundy – Утка Учится Укрываться Dec 28 '16 at 13:34
  • 1
    @JamesJGoodwin, данный ответ может помочь понять почему undefined – Grundy Dec 28 '16 at 13:34
  • @Grundy правильно ли я понимаю - мне нужно указать скрипту, чтобы он ждал загрузки json-файла? await? – JamesJGoodwin Dec 28 '16 at 14:02
  • @JamesJGoodwin, нет. В самой первой ссылке описывается что именно надо делать смотри пункты ответа: Способ 1 и Способ 2 – Grundy Dec 28 '16 at 14:10
  • @Grundy вроде сделал всё правильно, но функция возвращает [object Object] – JamesJGoodwin Dec 28 '16 at 14:29
  • @JamesJGoodwin, предлагаешь угадать что именно и как ты делал? :) – Grundy Dec 28 '16 at 14:30
  • @Grundy обновил код в топике. – JamesJGoodwin Dec 28 '16 at 14:30
  • 1
    Похоже не дочитал ответ :) Смотри - функция iataToCity - возвращает Promise, для доступа к тому что он возвращает ты должен использовать then. А ты пытаешься напрямую вставить Promise в строчку $('body').append('<div>'+ iataToCity('IEV') + '</div>'); – Grundy Dec 28 '16 at 14:31
  • @Grundy ни черта не понимаю. Я должен использовать then в теле iataToCity, или там, где мне нужно получить от неё результат? – JamesJGoodwin Dec 28 '16 at 14:41

0 Answers0