navigator.sendBeacon() - відправляє асинхронний POST запит.
navigator.sendBeacon(url, data);
navigator - об'єкт navigator.
url - рядок який містить URL адресу куди необхідно відправити запит. В url також можна вказувати дані для відправлення методом GET.
data - не обов'язково вказувати. Дані які необхідно передати, це може бути рядок, об'єкт Blob, FormData, ArrayBuffer.
sendBeacon() метод об'єкта navigator який відправляє на сервер асинхронний запит POST.
Метод призначений для відправлення невеликих даних без очікування відповіді результату від сервера.
Метод повертає логічне значення: true - якщо браузер успішно поставив в чергу відправлення даних, в іншому випадку повертає false. І не повертає результат запиту від сервера як XMLHttpRequest.
Beacon API не чекає коли відправити запит, а просто додає в чергу запит а вже браузер відправляє запит на сервер коли буде можливість (прийде черга для відправлення).
Зазвичай метод sendBeacon() призначений для відправлення даних перед вивантаженням документу, завантаженням нової веб сторінки. Так як метод sendBeacon() додає в чергу відправлення браузера запит і при цьому не блокувати виконання коду. Це дає більше гарантії що процес відправлення даних на сервер не буде перерваний перезавантаженням сторінки і т.п.
var res=navigator.sendBeacon('/ajax.php', 'act=beacon&test=sendbeacon');
alert(res);
var res=navigator.sendBeacon('/ajax.php', 'test=beacon'); //Content-type запиту "text/plain"
Відправленими даними є об'єкт FormData:
var form=new FormData();
form.append('test', 'beacon');
navigator.sendBeacon('ajax.php', form); //Content-Type запиту "multipart/form-data"
Відправленими даними є об'єкт Blob:
var data= {test:'beacon'};
var blob=new Blob([JSON.stringify(data)], {type : 'application/json'});
navigator.sendBeacon('ajax.php', blob); //Content-Type запиту "application/json"
Відправленими даними є об'єкт URLSearchParams:
var params = new URLSearchParams({ test: 'beacon', p1: 2020 });
navigator.sendBeacon('ajax.php', params); //Content-type запиту "text/plain"
window.addEventListener('beforeunload', function(){
var data='time='+performance.now();
navigator.sendBeacon('/ajax.php?act=beacon', data);
});