Вопрос

Моему 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-адреса, который вы хотите запросить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top