I am having trouble accessing data from an API. Here is my code with a fake access code.
$(function () { var $data = ('#data'); $.ajax({ type: 'GET', url: 'http://api.openweathermap.org/data/2.5/weather?lat=47.6062&lon=-122.3321&units=imperial&appid=a0bfe75fbff13d4040af7eb66d1d82b5', success: function (data) { $.each(data, function (i, item) { $data.append('<li>Temp: ' + item.main['temp'] + '</li>'); }); } }); });
I am getting an error that says “Uncaught TypeError: Cannot read property ‘temp’ of undefined” Here is the API.
{ "coord": { "lon": -122.3321, "lat": 47.6062 }, "weather": [ { "id": 721, "main": "Haze", "description": "haze", "icon": "50d" } ], "base": "stations", "main": { "temp": 61.36, "feels_like": 61.2, "temp_min": 55.49, "temp_max": 66.31, "pressure": 1022, "humidity": 85 }, "visibility": 10000, "wind": { "speed": 1.01, "deg": 319, "gust": 5.01 }, "clouds": { "all": 1 }, "dt": 1627137674, "sys": { "type": 2, "id": 2004026, "country": "US", "sunrise": 1627130239, "sunset": 1627185243 }, "timezone": -25200, "id": 5809844, "name": "Seattle", "cod": 200 }
I want to be able to access temp and description and append them or add them to my page. It does not need to be a list, but I want to style it in css. Feel free to change any of the code.
{"coord":{"lon":-122.33,"lat":47.61},"weather":[{"id":721,"main":"Haze","description":"haze","icon":"50d"}],"base":"stations","main":{"temp":64.09,"feels_like":63.91,"temp_min":57.43,"temp_max":69.62,"pressure":1022,"humidity":79},"visibility":10000,"wind":{"speed":1.99,"deg":325,"gust":3},"clouds":{"all":1},"dt":1627141350,"sys":{"type":2,"id":2004026,"country":"US","sunrise":1627130238,"sunset":1627185243},"timezone":-25200,"id":5809844,"name":"Seattle","cod":200}```
Advertisement
Answer
To access temp
you don’t need to use .each
loop you can access them directly i.e : data.main.temp
and for accessing the weather -> description you can use .each
loop and inside each loop use item.description
.
Demo Code :
var $data = ('#data'); //dummy json var data = { "coord": { "lon": -122.33, "lat": 47.61 }, "weather": [{ "id": 721, "main": "Haze", "description": "haze", "icon": "50d" }], "base": "stations", "main": { "temp": 64.09, "feels_like": 63.91, "temp_min": 57.43, "temp_max": 69.62, "pressure": 1022, "humidity": 79 }, "visibility": 10000, "wind": { "speed": 1.99, "deg": 325, "gust": 3 }, "clouds": { "all": 1 }, "dt": 1627141350, "sys": { "type": 2, "id": 2004026, "country": "US", "sunrise": 1627130238, "sunset": 1627185243 }, "timezone": -25200, "id": 5809844, "name": "Seattle", "cod": 200 } /* $.ajax({ //your codes.... */ console.log(data.main.temp) //use it like this... $.each(data.weather, function(i, item) { console.log(item.description) //get description like this.. }) /* } });*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>