Javascript синхронный AJAX тайм-аут - PullRequest
4 голосов
/ 21 февраля 2010

Мой 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();
  }
}

Будет ли это работать? Есть ли потенциальные проблемы с этим методом?

1 Ответ

0 голосов
/ 21 февраля 2010

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

Поскольку браузер закрывается, я думаю, вам не нужно получать какие-либо отзывы от ответов AJAX, чтобы обновитьстраница закрывается?В этом случае, возможно, вы могли бы решить свои проблемы, вставив теги IMG, скажем, в скрытый DIV, в свойствах которого src указан URL-адрес, который вы хотите запросить.

...