Тайм-аут синхронного AJAX Javascript
-
22-09-2019 - |
Вопрос
Моему Javascript необходимо отправить некоторые данные на сервер при закрытии страницы, что я сейчас делаю с помощью синхронного запроса AJAX (SJAX?) в window.onbeforeunload
.Проблема, конечно, в том, что если мой сервер работает слишком долго или сетевое соединение прерывается, браузер зависает.
Из того, что я прочитал, невозможно указать тайм-аут для синхронных запросов AJAX, а асинхронные запросы AJAX не работают. window.onbeforeunload
.Лучшее решение этой проблемы — использовать асинхронный запрос, а затем заблокировать браузер на некоторое время, чтобы запрос завершился:
window.onbeforeunload = function() {
doSomeAjax(); // asynchronous request
var now = new Date();
var time_limit = now.getTime()+2000; // 2,000 ms
while(now.getTime() < time_limit) {
now = new Date();
}
}
Будет ли это работать?Есть ли потенциальные проблемы с этим методом?
Решение
Ваша проблема в том, что браузер зависает, и вы пытаетесь решить ее, вручную замораживая браузер в цикле.Это также заморозит поток пользовательского интерфейса, так что это не потенциальная проблема, а определенная проблема.
Поскольку браузер закрывается, я думаю, вам не нужно получать какие-либо отзывы от ответов AJAX, чтобы обновить закрывающуюся страницу?В этом случае, возможно, вы могли бы решить свои проблемы, внедрив IMG
теги, скажем, в скрытый DIV
, с их src
свойства, заданные для URL-адреса, который вы хотите запросить.