我的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();
}
}
这会有用吗?这种方法有任何潜在的问题吗?
答案 0 :(得分:0)
你的问题是浏览器冻结了,你试图通过手动冻结浏览器来解决它。这也将冻结UI线程,因此这不是一个潜在的问题,这是一个明确的问题。
由于浏览器正在关闭,我猜您不需要收到来自AJAX响应的任何反馈,以更新正在关闭的页面?在这种情况下,也许您可以通过将IMG
标记注入隐藏的DIV
,并将src
属性设置为您要请求的网址来解决您的问题。