Асинхронная передача данных с помощью sendBeacon в JavaScript

RedDeveloper
30.03.2023 14:11
Асинхронная передача данных с помощью sendBeacon в JavaScript

В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных способов решения этой задачи является использование запросов AJAX. Однако существуют определенные ситуации, когда AJAX не подходит, например, когда пользователь переходит со страницы или закрывает вкладку. Здесь на помощь приходит метод sendBeacon().

Метод sendBeacon() - это новое дополнение к Web API в HTML5, которое позволяет асинхронно отправлять данные на веб-сервер, не блокируя пользовательский интерфейс и не прерывая работу пользователя. В этой статье мы рассмотрим метод sendBeacon() более подробно и приведем несколько примеров, демонстрирующих его использование.

Что такое sendBeacon() и как он работает?

Метод sendBeacon() используется для асинхронной отправки небольшого количества данных на веб-сервер. Он принимает два аргумента:

navigator.sendBeacon(url);
navigator.sendBeacon(url, data);

Url - URL веб-сервера, на который будут отправлены данные.

Data - данные, которые будут отправлены на веб-сервер.

Аргумент data может быть строкой, объектом FormData или объектом Blob. Данные отправляются на веб-сервер с помощью HTTP POST-запроса с заголовком Content-Type, установленным на application/octet-stream.

Метод sendBeacon() возвращает булево значение, указывающее, были ли данные успешно поставлены в очередь на передачу. Если пользователь перейдет со страницы до того, как данные будут переданы, они будут потеряны.

Важно отметить, что метод sendBeacon() не гарантирует, что данные будут успешно переданы на веб-сервер. Данные отправляются асинхронно, поэтому нет способа узнать наверняка, были ли они успешно отправлены. Однако если метод возвращает true, это означает, что данные были успешно поставлены в очередь на передачу и будут отправлены как можно скорее.

Давайте рассмотрим несколько примеров, чтобы увидеть, как можно использовать sendBeacon().

Отправка данных в виде строки

const data="Hello, world!";
const url="/log";
const result = navigator.sendBeacon(url, data);
console.info(result); // true or false

В этом примере мы отправляем строку "Hello, world!" в конечную точку /log на сервере. Метод sendBeacon() возвращает булево значение, указывающее, были ли данные успешно поставлены в очередь на передачу.

Отправка данных в виде объекта FormData

const formData = new FormData();
formData.append("name", "John Doe");
formData.append("email", "[email protected]");
const url="/submit-form";
const result = navigator.sendBeacon(url, formData);
console.info(result); // true or false

Отправка данных в виде объекта Blob

const blob = new Blob(["Hello, world!"], { type: "text/plain" });
const url="/log";
const result = navigator.sendBeacon(url, blob);
console.info(result); // true or false

В этом примере мы создаем объект Blob, содержащий строку "Hello, world!" и устанавливаем свойство type в text/plain. Затем мы отправляем данные в конечную точку /log на сервере. И снова метод sendBeacon() возвращает булево значение, указывающее, были ли данные успешно поставлены в очередь на передачу.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.