简介
您好,我遇到的问题是我使用JSON提取API数据但是我在显示或使用数据时遇到问题。
我的代码
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
返回我&#39; undefined&#39;。我做错了什么,我的错误在哪里?我只是简单地提取信息或用不正确的方法调用对象吗?
答案 0 :(得分:2)
var ourData = JSON.stringify(data.responseText);
在这里,您将获取表示对象的字符串JSON,并将其转换为字符串JSON,表示字符串JSON ,表示对象< / em>的
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会将其视为空字符串。