Как получить ответ JSON из открытого API в объект JSON? [Дубликат]

1

Я пытаюсь получить некоторые данные из API OpenWeatherMap. Когда я отправляю запрос с требуемым ключом API и данными о местоположении, все возвращается обратно нормально. Возвращенные данные отображаются в формате JSON. Однако, когда я выполняю функцию JSON.parse() над строкой, она выдает ошибку "неожиданный конец ввода".

Одна вещь, которая мне показалась интересной, заключалась в том, что если я должен был сохранить строку в переменной, а затем приступить к выполнению функции в консоли отладки Chrome, то все в порядке.

let jsonData;
let jsonActual;
function GetWeather(city, country){
  Http = new XMLHttpRequest();
  Http.open("GET", weatherUrl + city + "," + country + weatherKey);
  Http.send();
  Http.onreadystatechange=(e)=>{
    jsonData = Http.response;
    jsonActual = JSON.parse(jsonData.toString());

  }
}

При использовании консоли:

x = JSON.parse(jsonData) // Completes successfully
  • 0
    Вы не проверяете readyState в своем onreadystatechange события onreadystatechange . Ответ будет завершен только тогда , когда readyState является complete .
Теги:
xmlhttprequest

2 ответа

1

В вашей функции onreadystatechange вас есть

Http.onreadystatechange=(e)=>{
    jsonData = Http.response;
    jsonActual = JSON.parse(jsonData.toString());

  }

Попробуйте сделать это вместо этого:

Http.onreadystatechange=(e)=>{
    if (this.readyState === 4) {
         jsonData = Http.response;
         jsonActual = JSON.parse(jsonData.toString());
    }

  }
0

Ваш readyState никогда не проверяется, если он complete:

Http.onreadystatechange = e => {
    if (this.readyState == "complete") {
        jsonData = Http.response;
        jsonActual = JSON.parse(jsonData.toString());
    }
}

Вы также можете проверить против 4:

Http.onreadystatechange = e => {
    if (this.readyState == 4) {
        jsonData = Http.response;
        jsonActual = JSON.parse(jsonData.toString());
    }
}
  • 1
    res.json() возвращает проанализированный массив / объект ... бессмысленно JSON.parse () это
  • 0
    О да, извините @charlietfl.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню