05

Fetch

Fetch API

Цель: получить навыки использования Fetch API и Storage, изучить формат обмена данными JSON.

Теория для изучения

  • Изучите описание формата данных JSON и работу с ним с использованием глобального объекта JSON.
  • Познакомьтесь с функцией fetch() и объектом Response.
  • Прочитайте про async/await и связь асинхронных функций с объектом Promise.
  • Изучите работу с localStorage.

Источники

Практическая часть

  1. Переключите на ветку main.
  2. Убедитесь, что все настройки инструментов и необходимые зависимости есть. Если нет, то вернитесь к прошлым работам и настройте.
  3. Создайте ветку lab5 и работайте на ней.
  4. Создайте новый документ html с H1 заголовком «ФИО - Лабораторная работа №5».
  5. В созданный документ html добавьте две секции: для галереи и отправки температуры.
  6. Выполните задания описанные ниже.
  7. Проведите ручное тестирование в браузере.
  8. Отформатируйте документы.
  9. Убедитесь, что нет замечаний от ESLint.
  10. Зафиксируйте результаты работы с помощью системы контроля версий git и отправьте ветку lab5 в репозиторий на github.

Тост

Создайте компонент всплывающего уведомления (toasts), который после отображается на странице внизу справа и показывает информацию. Закрывается он по нажатию на соответствующую кнопку. Отображение и скрытие должно происходить плавно. Также он должен иметь разные стили для отображения ошибки (красный фон) и сообщения (зеленый фон). Не забывайте про контрастность и доступность, а также про отзывчивость (RWD).

Галерея

  1. Сервер с документацией.
  2. В галерее, используя AJAX, после загрузки страницы отправить запрос на получение изображений и отобразить их на странице. Если возникают какие-либо ошибки осуществить максимум 3 повторных запроса с небольшим интервалом. Если данные так и не удалось получить, то оповестить об этом пользователя с помощью компонента тоста. На время пока ожидается ответ от сервера, показать загрузчик, после получения ответа загрузчик должен замениться на контент или должно появится сообщение об ошибке. Если пришел пустой массив, то на месте галереи должен отображаться текст “Изображения не найдены”.
  3. В начало этой же секции, добавить кнопку обновления галереи, при нажатии на которую отправляет запрос на получение изображений.
  4. Все блоки изображений с подписями должны выглядеть одинаково, не смотря на размер изображения или длину текста. В один ряд помещается 4-изображения (используйте grid).

Температура

  1. Сервер с документацией.
  2. В этой секции добавьте форму для ввода номера аудитории и температуры. Не забудьте про доступность.
  3. Для отправки данных из формы предотвратите стандартное поведение формы, сформируйте собственный post-запрос с помощью fetch. Не забудьте в заголовках указать тип передаваемого контента (Content-Type) и отправить данные с правильными типами (строка и число).
  4. На время ожидания ответа от сервера заблокируйте возможность отправлять новые запросы из формы.
  5. При успешной обработке данных на сервере с помощью тоста выведите сообщение из ответа и очистите форму. При ошибке, выведите сообщение ошибки в toast, но форму не очищайте.

Переключение темы

Подготовьте минимальные стили для светлой и темной тем (цвета можно взять например у DaisyUI в разделе List of themes). Добавьте хедер к странице и в нем кнопку для переключения светлой и темной темы. При перезагрузке страницы должна отображаться последняя выбранная тема (подсказка - localStorage) и не происходило “мерцания” темы, когда сначала отображается одна тема, а потом подгружается сохраненная (подсказка - необходимо воспользоваться порядком загрузки и выполнения кода JS). Рекомендуется использовать css переменные и переключение классов.

Требования к решению

  • HTML код валиден.
  • Отсутствуют ошибки ESLint.
  • Отсутствуют ошибки в консоли браузера при работе с веб-страницей.

Результаты выполнения лабораторной работы

Результаты работы проверены наставником.

Статическая веб-страница на локальной машине, со структурой и оформлением, которая соответствует требованиям и сохранена в системе контроля версий.

Вопросы для защиты

  1. Определение и назначение AJAX.
  2. Fetch API (функция и ее параметры, используемые объекты).
  3. Объект Response. Его свойства и методы.
  4. Формат JSON. Глобальный объект JSON и его методы.
  5. Хранение данных на клиенте.
  6. localStorage и sessionStorage. Разница, их методы.
  7. Асинхронные функции async/await. Возвращаемые значения.
  8. Проблема “цветных” функций.