I'm trying to wrap my head around ajax now that this is using fetch to retrieve the data. The syntax is the same roughly, but was curious as to what it would look like.
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="searchContainer">
<input class="searchControl" type="text" placeholder="City Name or Zipcode" id="searchInput">
<button class="searchControl" id="searchBtn">Search</button>
</div>
<div id="weatherContainer">
<div id="weatherDescription">
<h1 id="cityHeader"></h1>
<div id="weatherMain">
<div id="temperature"></div>
<div id="weatherDescriptionHeader"></div>
<div><img id="documentIconImg"></div>
</div>
<hr>
<div id="windSpeed" class="bottom-details"></div>
<div id="humidity" class="bottom-details"></div>
</div>
</div>
<script src="script.js" ></script>
</body>
---
Here is the JavaScript I'd like to convert from using the fetch method, to using an AJAX call in place of it.
---
let appId = 'b1e22f9b3891a9a6fc389e3e1a4cc496';
let units = 'imperial';
let searchMethod;
function getSearchMethod(searchTerm) {
if(searchTerm.length === 5 && Number.parseInt(searchTerm) + '' === searchTerm)
searchMethod = 'zip';
else
searchMethod = 'q';
}
function searchWeather(searchTerm) {
getSearchMethod(searchTerm);
fetch(`http://api.openweathermap.org/data/2.5/weather?${searchMethod}=${searchTerm}&APPID=${appId}&units=${units}`)
.then((result) => {
return result.json();
}).then((res) => {
init(res);
});
}
function init(resultFromServer) {
switch (resultFromServer.weather[0].main) {
case 'Clear':
document.body.style.backgroundImage = "url('clear.jpg')";
break;
case 'Clouds':
document.body.style.backgroundImage = "url('cloudy.jpg')";
break;
case 'Rain':
case 'Drizzle':
case 'Mist':
document.body.style.backgroundImage = "url('rain.jpg')";
break;
case 'Thunderstorm':
document.body.style.backgroundImage = "url('storm.jpg')";
break;
case 'Snow':
document.body.style.backgroundImage = "url('snow.jpg')";
break;
default:
break;
}
let weatherDescriptionHeader = document.getElementById('weatherDescriptionHeader');
let temperatureElement = document.getElementById('temperature');
let humidityElement = document.getElementById('humidity');
let windSpeedElement = document.getElementById('windSpeed');
let cityHeader = document.getElementById('cityHeader');
let weatherIcon = document.getElementById('documentIconImg');
weatherIcon.src = 'http://openweathermap.org/img/w/' + resultFromServer.weather[0].icon + '.png';
let resultDescription = resultFromServer.weather[0].description;
weatherDescriptionHeader.innerText = resultDescription.charAt(0).toUpperCase() + resultDescription.slice(1);
temperatureElement.innerHTML = Math.floor(resultFromServer.main.temp) + '°';
windSpeedElement.innerHTML = 'Winds at ' + Math.floor(resultFromServer.wind.speed) + ' m/s';
cityHeader.innerHTML = resultFromServer.name;
humidityElement.innerHTML = 'Humidity levels at ' + resultFromServer.main.humidity + '%';
setPositionForWeatherInfo();
}
function setPositionForWeatherInfo() {
let weatherContainer = document.getElementById('weatherContainer');
let weatherContainerHeight = weatherContainer.clientHeight;
let weatherContainerWidth = weatherContainer.clientWidth;
weatherContainer.style.left = `calc(50% - ${weatherContainerWidth/2}px)`;
weatherContainer.style.top = `calc(50% - ${weatherContainerHeight/1.3}px)`;
weatherContainer.style.visibility = 'visible';
}
document.getElementById('searchBtn').addEventListener('click', () => {
let searchTerm = document.getElementById('searchInput').value;
if(searchTerm)
searchWeather(searchTerm);
});