JSON [объект объекта] извлечение данных (невозможно получить данные объекта)

1

Вступление
Привет, У меня возникла проблема, когда я извлекаю данные API с помощью JSON, но потом у меня проблемы с показом или работой с данными.

Мой код

function pullingInformation () {
    var data = new XMLHttpRequest();
    data.open('GET', 'RANDOM URL CANT SHOW API KEY');

    data.onload = function () {
        if (data.status >= 200 && data.status < 400) {
            // Different types of JSON.random(). Examples are: parse() and stringify();
            var ourData = JSON.stringify(data.responseText);
            var tempOurData = JSON.parse(ourData);
            tempHTML = WeatherHTML(tempOurData);
            $('#DivID').html(tempHTML);
        }
        else {
            $('#DivID').html('Server failure, please try again!');
        }
    };

    data.onerror = function () {
        $('#DivID').html('Connection error ocurred, please try again!');
    }
}

function WeatherHTML (data) {
    tempHTML = data;
    console.log(tempHTML);
console.log(tempHTML.coord);
    return tempHTML.coord;
}

проблема
Когда я console.log() tempHTML, я получаю весь код из API, но если я попытаюсь взять только определенный бит кода, который выглядит так:

{"coord":{"lon":45.1,"lat":12.45},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"base":"stations","main:{"temp":298.508,"pressure":1031.37,"humidity":97,"temp_min":298.508,"temp_max":298.508,"sea_level":1031.75,"grnd_level":1031.37},"wind":{"speed":5.72,"deg":92.5012},"clouds":{"all":12},"dt":1515515421,"sys":{"message":0.0155,"country":"YE","sunrise":1515468218,"sunset":1515509418},"id":6940814,"name":"Craiter","cod":200}

например tempHTML.coord возвращает мне "undefined". Что я делаю неправильно и где моя ошибка? Я просто искал информацию или вызывал объект в некорректном методе?

  • 2
    "tempHTML.coord" - вы нигде не используете его в своем примере основного кода. Вы должны предоставить реальный минимальный воспроизводимый пример, который не фрагментирован.
  • 1
    Вы должны включить строгий режим . Неявные глобальные переменные являются хорошим способом написания сложного кода.
Показать ещё 1 комментарий
Теги:
object

1 ответ

2
Лучший ответ
var ourData = JSON.stringify(data.responseText);

Здесь вы берете строку JSON, которая представляет объект и преобразовывает его в строку JSON, которая представляет строку JSON, которая представляет объект.

var tempOurData = JSON.parse(ourData);

Тогда вы отмените это, дав себе оригинальную строку JSON.

Это совершенно бессмысленно, и вы получите тот же эффект:

var tempOurData = data.responseText;
tempHTML = WeatherHTML(tempOurData);

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

tempHTML.coord

Затем вы попытаетесь прочитать свойство coord строки. Он не определен, потому что строки не имеют свойства coord.


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

if (data.status >= 200 && data.status < 400) {
    var ourData = JSON.parse(data.responseText);
    console.log(ourData.coord);
}

Кроме того, вам нужно исправить ваш JSON. Это неверно. Вам не хватает цитаты. JSON Lint точно укажет, где именно.


$('#DivID').html(tempHTML);

Метод jQuery html ожидает передачи строки, объекта jQuery или объекта DOM.

{"lon":45.1,"lat":12.45} - простой объект, а не один из вышеперечисленных типов данных. jQuery будет обрабатывать его, как если бы это была пустая строка.

  • 0
    У меня проблема. Попробуйте добавить любые данные в HTML-элемент, например, div. Это все еще не работает
  • 0
    Но попробуйте добавить что-то вроде ourData.coord или ourData.name, а не только ourData, потому что это работает
Показать ещё 1 комментарий

Ещё вопросы

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