Javascript同步AJAX超时

时间:2010-02-21 17:32:43

标签: javascript ajax asynchronous onbeforeunload

我的Javascript需要在页面关闭时向服务器发送一些数据,我目前在window.onbeforeunload中使用同步AJAX(SJAX?)请求。当然,问题在于,如果我的服务器耗时太长或网络连接中断,浏览器会冻结。

从我读过的内容来看,无法为同步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 :(得分:0)

你的问题是浏览器冻结了,你试图通过手动冻结浏览器来解决它。这也将冻结UI线程,因此这不是一个潜在的问题,这是一个明确的问题。

由于浏览器正在关闭,我猜您不需要收到来自AJAX响应的任何反馈,以更新正在关闭的页面?在这种情况下,也许您可​​以通过将IMG标记注入隐藏的DIV,并将src属性设置为您要请求的网址来解决您的问题。