gpt4 book ai didi

javascript - 如何在javascript中用 "fetch"方法替换 "ajax"?

转载 作者:行者123 更新时间:2023-11-30 10:57:23 24 4
gpt4 key购买 nike

现在我正在尝试将注意力集中在 ajax 上,因为它正在使用 fetch 来检索数据。语法大致相同,但很好奇它会是什么样子。


<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>

这是我想从使用 fetch 方法转换为使用 AJAX 调用来代替它的 JavaScript。

---
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) + '&#176;';
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);
});
---

如果有人有任何想法或知道 100% 有效的解决方案,请随时分享。不确定该怎么做。

最佳答案

编辑: 这个答案是错误的还是什么??不确定为什么要投票?嘘……

fetch$.ajax 是到达同一目的地的不同路径。它们都松散地表现得像XMLHttpRequest ..

我建议坚持使用 fetch,因为 默认情况下 广泛支持它,比 XMLHttpRequest 更易于使用>,并且不需要任何第三方库。要使用 $.ajax,(据我所知)您必须导入 jQuery - 它会与 $.ajax< 一起导入很多不必要的代码。如果您可以在没有第三方库的情况下做事,那么您应该这样做。

话虽这么说,使用 $.ajax 看起来像这样:

特殊功能:

function searchWeather(searchTerm) {
getSearchMethod(searchTerm);
$.ajax({
url: `https://api.openweathermap.org/data/2.5/weather?${searchMethod}=${searchTerm}&APPID=${appId}&units=${units}`,
success: (data) => {
init(data);
},
failure: (err) => {
console.log("ERROR!", err);
}
});
}

演示:

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);
$.ajax({
url: `https://api.openweathermap.org/data/2.5/weather?${searchMethod}=${searchTerm}&APPID=${appId}&units=${units}`,
success: (data) => {
init(data);
},
failure: (err) => {
console.log("ERROR!", err);
}
})
/*
fetch(`https://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) + "&#176;";
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);
});
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<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>

关于javascript - 如何在javascript中用 "fetch"方法替换 "ajax"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59463417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com