Javascript 同步 AJAX 超时

标签 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();
  }
}

这行得通吗?此方法是否存在任何潜在问题?

最佳答案

您的问题是浏览器死机了,您正试图通过在循环中手动卡住浏览器来解决这个问题。这也会卡住 UI 线程,因此这不是潜在问题,而是确定的问题。

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

关于Javascript 同步 AJAX 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2306715/

相关文章:

node.js - node.js 中的 try-catch-finally block 是否同步?

javascript - 如何检查Google Recaptcha V2 Puzzle是否显示?

javascript - 将 Canvas 的一部分移动到其他 Canvas

javascript - 异步 xml 请求不返回

javascript - 如何在浏览器中手动输入 POST 数据

javascript - 保护 ajax 数据以供提交

android - 屏幕方向期间 fragment 内的异步任务

javascript - 带标签的 Chrome 扩展

javascript - 循环内的 Promise 闭包

jQuery数据绑定(bind)库或插件推荐