Задачи к уроку 1.8: Асинхронный JavaScript и AJAX

Задачи к уроку 1.8: Асинхронный JavaScript и AJAX

17.02.2023
345
Мы изучили асинхронный JavaScript и AJAX. Чтобы закрепить новый материал, давайте рассмотрим 10 задач с решениями.

Задача №1

Напишите функцию, которая делает AJAX-запрос и возвращает Promise. URL запроса: https://jsonplaceholder.typicode.com/posts/1. Результат запроса должен содержать ID, заголовок и тело сообщения.

Решение:

// Создаем функцию makeRequest(), которая возвращает новый Promise объект
function makeRequest() {
  return new Promise((resolve, reject) => {
    // Создаем новый объект XMLHttpRequest для отправки запроса на сервер
    const xhr = new XMLHttpRequest();
    // Устанавливаем метод и URL для запроса
    xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1');
    // Устанавливаем обработчик события для ответа на запрос
    xhr.onload = () => {
      // Если статус ответа равен 200, то разбираем ответ и создаем новый объект с нужными свойствами
      if (xhr.status === 200) {
        const response = JSON.parse(xhr.responseText);
        const result = {
          id: response.id,
          title: response.title,
          body: response.body
        };
        // Решаем Promise с полученным объектом
        resolve(result);
      } else {
        // Если статус ответа не равен 200, то отклоняем Promise с сообщением о причине ошибки
        reject(xhr.statusText);
      }
    };
    // Устанавливаем обработчик события для ошибок при запросе
    xhr.onerror = () => reject(xhr.statusText);
    // Отправляем запрос на сервер
    xhr.send();
  });
}

Описание решения:

Эта функция отправляет GET-запрос на URL https://jsonplaceholder.typicode.com/posts/1 и возвращает Promise, который разрешается после получения ответа от сервера.

Задача №2

Напишите функцию, которая делает POST-запрос на URL https://jsonplaceholder.typicode.com/posts и возвращает Promise. Тело запроса должно содержать заголовок и тело сообщения.

Решение:

function makeRequest() {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest(); // создаем новый объект XMLHttpRequest
    xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts'); // задаем тип запроса и URL-адрес сервера, куда отправляется запрос
    xhr.setRequestHeader('Content-Type', 'application/json'); // устанавливаем заголовок Content-Type для отправки данных в формате JSON
    xhr.onload = () => {
      if (xhr.status === 201) { // если сервер вернул успешный ответ (код 201), то преобразуем полученный JSON-ответ в объект и передаем его в качестве результата
        const response = JSON.parse(xhr.responseText);
        resolve(response);
      } else { // если произошла ошибка, то передаем текст статуса ошибки в качестве причины отклонения
        reject(xhr.statusText);
      }
    };
    xhr.onerror = () => reject(xhr.statusText); // если произошла ошибка сети, то передаем текст статуса ошибки в качестве причины отклонения
    const data = JSON.stringify({ // преобразуем данные в формат JSON
      title: 'foo',
      body: 'bar',
      userId: 1
    });
    xhr.send(data); // отправляем запрос на сервер с данными в формате JSON
  });
}

Описание решения:

Эта функция отправляет POST-запрос на URL https://jsonplaceholder.typicode.com/posts с заголовком и телом сообщения в формате JSON и возвращает Promise, который разрешается после получения ответа от сервера.

Задача №3

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/comments?postId=1 и выводит в консоль все комментарии к сообщению с ID = 1.

Решение:

function fetchComments() {
  // Используем метод fetch для отправки GET-запроса к API и получения данных
  fetch('https://jsonplaceholder.typicode.com/comments?postId=1')
    // Обрабатываем полученный ответ, используя метод .json(), который преобразует полученные данные в объект JavaScript
    .then(response => response.json())
    // Обрабатываем полученные данные
    .then(data => console.log(data))
    // Обрабатываем ошибку, если она возникнет при выполнении запроса
    .catch(error => console.error(error));
}

Описание решения:

Эта функция использует метод fetch для отправки GET-запроса на URL https://jsonplaceholder.typicode.com/comments?postId=1 и выводит результат в консоль.

Задача №4

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/users и выводит в консоль список всех пользователей в формате: "ID: Имя пользователя (Email)".

Решение:

function fetchUsers() {
  // Получаем данные пользователей с сервера
  fetch('https://jsonplaceholder.typicode.com/users')
    .then(response => response.json()) // преобразуем ответ в формате JSON
    .then(data => {
      // для каждого пользователя в массиве выводим информацию в консоль
      data.forEach(user => {
        console.log(`${user.id}: ${user.name} (${user.email})`);
      });
    })
    .catch(error => console.error(error)); // обрабатываем ошибки
}

Описание решения:

Эта функция использует метод fetch для отправки GET-запроса на URL https://jsonplaceholder.typicode.com/users и выводит список пользователей в консоль.

Задача №5

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/photos?albumId=1 и выводит в консоль все фотографии из альбома с ID = 1.

Решение:

function fetchPhotos() {
  // Отправляем GET запрос на https://jsonplaceholder.typicode.com/photos?albumId=1
  fetch('https://jsonplaceholder.typicode.com/photos?albumId=1')
    // Получаем ответ в формате JSON
    .then(response => response.json())
    // Выводим полученные данные в консоль
    .then(data => console.log(data))
    // Обрабатываем ошибки и выводим сообщение об ошибке в консоль
    .catch(error => console.error(error));
}

Описание решения:

Эта функция использует метод fetch для отправки GET-запроса на URL https://jsonplaceholder.typicode.com/photos?albumId=1 и выводит результат в консоль.

Задача №6

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/todos и выводит в консоль список задач, отсортированных по убыванию приоритета.

Решение:

function fetchTodos() {
  // Делаем GET-запрос к API и получаем данные в формате JSON
  fetch('https://jsonplaceholder.typicode.com/todos')
    .then(response => response.json())
    // Сортируем данные по полю userId в обратном порядке и выводим каждый элемент массива в консоль
    .then(data => {
      data.sort((a, b) => b.userId - a.userId);
      data.forEach(todo => {
        console.log(`${todo.id}: ${todo.title} (${todo.completed})`);
      });
    })
    .catch(error => console.error(error));
}

Описание решения:

Эта функция использует метод fetch для отправки GET-запроса на URL https://jsonplaceholder.typicode.com/todos, сортирует результат по убыванию приоритета и выводит список задач в консоль.

Задача №7

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/albums и выводит в консоль список альбомов, отсортированных по возрастанию ID пользователя.

Решение:

function fetchAlbums() {
  fetch('https://jsonplaceholder.typicode.com/albums') // отправляем GET-запрос на сервер
    .then(response => response.json()) // преобразуем ответ сервера в объект JavaScript
    .then(data => {
      data.sort((a, b) => a.userId - b.userId); // сортируем данные по полю userId
      data.forEach(album => {
        console.log(`${album.id}: ${album.title} (${album.userId})`); // выводим информацию об альбоме
      });
    })
    .catch(error => console.error(error)); // обработка ошибок
}

Описание решения:

Эта функция использует метод fetch для отправки GET-запроса на URL https://jsonplaceholder.typicode.com/albums, сортирует результат по возрастанию ID пользователя и выводит список альбомов в консоль.

Задача №8

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/posts/1/comments и выводит в консоль все комментарии к сообщению с ID = 1.

Решение:

function fetchComments() {
  fetch('https://jsonplaceholder.typicode.com/posts/1/comments')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error));
}

Описание решения:

Эта функция использует метод fetch для отправки GET-запроса на URL https://jsonplaceholder.typicode.com/posts/1/comments и выводит результат в консоль.

Задача №9

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/posts/1 и изменяет заголовок сообщения на "New Title".

Решение:

function updatePostTitle() {
  fetch('https://jsonplaceholder.typicode.com/posts/1') // делаем GET запрос на сервер для получения объекта поста с id = 1
    .then(response => response.json())
    .then(data => {
      data.title = 'New Title'; // изменяем заголовок поста
      return fetch('https://jsonplaceholder.typicode.com/posts/1', { // делаем PUT запрос на сервер для обновления объекта поста
        method: 'PUT', // указываем метод запроса
        body: JSON.stringify(data), // передаем обновленный объект в теле запроса
        headers: {
          'Content-Type': 'application/json' // указываем заголовок Content-Type для корректного парсинга тела запроса на сервере
        }
      });
    })
    .then(response => response.json()) // парсим ответ сервера в формате json
    .then(data => console.log(data)) // выводим обновленный объект на консоль
    .catch(error => console.error(error)); // выводим ошибки в консоль, если они есть
}

Описание решения:

Эта функция использует метод fetch для отправки GET-запроса на URL https://jsonplaceholder.typicode.com/posts/1, изменяет заголовок сообщения и отправляет обновленные данные на сервер методом PUT.

Задача №10

Напишите функцию, которая делает запрос на URL https://jsonplaceholder.typicode.com/posts/1 и удаляет сообщение с ID = 1.

Решение:

function deletePost() {
  fetch('https://jsonplaceholder.typicode.com/posts/1', {
      method: 'DELETE'
    })
    .then(response => console.log(response.status))
    .catch(error => console.error(error));
}

Описание решения:

Эта функция использует метод fetch для отправки запроса на URL https://jsonplaceholder.typicode.com/posts/1 методом DELETE и выводит статус ответа в консоль.

Заключение

Мы рассмотрели 10 задач с решениями, которые помогут закрепить новый материал про асинхронный JavaScript и AJAX. Теперь вы знаете, как делать AJAX-запросы, обрабатывать ответы от сервера и изменять данные на сервере.