Вариант использования:
Я хочу надежно инициировать POST-запрос к моему бэкэнду, когда пользователь закрывает браузер. Только успешный запрос. Мне не нужен код ответа или похожий. Важно: никаких заметных задержек для взаимодействия с пользователем.
Мой код:
window.onbeforeunload = function () {
var async = true;
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.open('POST', URL, async);
xmlHttpRequest.setRequestHeader(HEADERS);
xmlHttpRequest.send(CONTENT);
var start = new Date().getTime();
while (new Date().getTime() < start + 500) {
}
};
Мои наблюдения:
В моих системах код работает "надежно" в браузерах Chrome и Edge, но вFireFox и IE только частично.
Мои вопросы:
1. Совпадают ли мои наблюдения?
2. Что происходит в приведенном выше коде под колпаком (EventLoop и т. Д.) И когда сработает запрос?
3. Есть ли надежные альтернативы?
КСТАТИ: Синхронизация XMLHttpRequest не вариант, потому что send () ждет так долго, пока ответ сервера не станет доступен.