Вступление
Привет, У меня возникла проблема, когда я извлекаю данные 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". Что я делаю неправильно и где моя ошибка? Я просто искал информацию или вызывал объект в некорректном методе?
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 будет обрабатывать его, как если бы это была пустая строка.