4

当页面关闭时,我的 Javascript 需要向服务器发送一些数据,我目前使用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();
  }
}

这行得通吗?这种方法有什么潜在的问题吗?

4

1 回答 1

0

您的问题是浏览器冻结,您试图通过手动循环冻结浏览器来解决它。这也会冻结 UI 线程,所以这不是一个潜在的问题,而是一个明确的问题。

由于浏览器正在关闭,我想您不需要从 AJAX 响应中接收任何反馈来更新正在关闭的页面?IMG在这种情况下,也许您可​​以通过将标签注入到 hidden中来解决您的问题,并将DIV它们的src属性设置为您要请求的 URL。

于 2010-02-21T17:38:27.897 回答