Загрузка данных
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Получение данных пользователя</title>
</head>
<body>
<div class="container">
<h1>Получение данных пользователя с API</h1>
<p>Введите ID пользователя от 1 до 10</p>
<input
type="number"
id="userId"
placeholder="Введите ID пользователя"
min="1"
max="10"
>
<button id="loadBtn">
Получить данные пользователя
</button>
<div id="result"></div>
</div>
<script>
const button = document.getElementById("loadBtn");
const result = document.getElementById("result");
const userIdInput = document.getElementById("userId");
button.addEventListener("click", getUserData);
async function getUserData() {
const userId = userIdInput.value;
const controller = new AbortController();
const timeout = setTimeout(() => {
controller.abort();
}, 5000);
try {
const response = await fetch(
`https://jsonplaceholder.typicode.com/users/${userId}`,
{
signal: controller.signal
}
);
clearTimeout(timeout);
if (!response.ok) {
throw new Error(response.status);
}
const user = await response.json();
result.innerHTML = `
<div class="user">
<h2>Информация о пользователе</h2>
<p><b>ID:</b> ${user.id}</p>
<p><b>Имя:</b> ${user.name}</p>
<p><b>Username:</b> ${user.username}</p>
<p><b>Email:</b> ${user.email}</p>
<p><b>Телефон:</b> ${user.phone}</p>
<p><b>Веб-сайт:</b> ${user.website}</p>
<p><b>Компания:</b> ${user.company.name}</p>
<p><b>Город:</b> ${user.address.city}</p>
</div>
`;
} catch (error) {
clearTimeout(timeout);
let errorCode;
if (error.name === "AbortError") {
errorCode = "TIMEOUT";
} else if (/^\d+$/.test(error.message)) {
errorCode = error.message;
} else {
errorCode = "NETWORK";
}
result.innerHTML = `
<div class="error">
Ошибка: ${errorCode}
</div>
`;
}
}
</script>
<style>
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
font-family: Arial, sans-serif;
background: white;
}
.container {
width: 550px;
padding: 40px;
background: #24152e;
border: 2px solid black;
border-radius: 15px;
}
h1 {
margin-top: 0;
text-align: center;
color: white;
font-size: 28px;
}
.container > p {
text-align: center;
color: #d6c9dd;
margin-bottom: 25px;
}
input {
width: 100%;
padding: 14px 16px;
margin-bottom: 15px;
background: white;
color: black;
border: 2px solid black;
border-radius: 8px;
font-size: 16px;
outline: none;
}
input:focus {
border-color: #8b4bad;
}
button {
width: 100%;
padding: 14px;
background: #663283;
color: white;
border: 2px solid black;
border-radius: 8px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
}
button:hover {
background: #7e459d;
}
#result {
margin-top: 25px;
}
.user {
padding: 22px;
background: white;
border: 2px solid black;
border-radius: 10px;
}
.user h2 {
margin-top: 0;
color: #32153f;
}
.user p {
margin: 10px 0;
color: #222;
}
.user b {
color: #5c2875;
}
.error {
padding: 22px;
background: white;
color: #b00020;
border: 2px solid black;
border-radius: 10px;
text-align: center;
font-size: 20px;
font-weight: bold;
}
</style>
</body>
</html>