小编典典

可以使用unload事件可靠地触发ajax请求吗?

ajax

我需要一种监视用户编辑会话的方法,而我正在审查的解决方案之一将使我使用一个unload事件发送ajax请求,以通知服务器编辑会话的结束。

我对unload事件的了解(相当有限)表明,附加到此处理程序的代码必须快速运行,因此通常用于清除对象以防止内存泄漏。

我的问题是,这样做是否足够可靠?

PS。我知道这个async: false选择。


阅读 436

收藏
2020-07-26

共1个答案

小编典典

如果您的服务器足够快地响应,则此方法相当可靠。确实需要提防的事情。如果关闭浏览器并在unload事件上发送AJAX请求,则很有可能在窗口对象被销毁之前不会及时从服务器返回响应。在这种情况下(至少使用IE),发生的事情是它将孤立您的连接对象,直到达到连接超时后才正确终止它。如果您的服务器没有打开连接保持活动状态,则在关闭2个窗口(同时仍打开另一个窗口)之后,您将耗尽与服务器的打开连接(对于IE6-7,对于IE8-6窗口)并且您将无法打开您的网站,直到达到连接超时为止。

我遇到了这样的情况:打开打开要卸载的AJAX请求的弹出窗口之前,它非常可靠,但是受到上述发行版的困扰,我花了很长时间来跟踪它下来了解发生了什么。之后,我要做的是确保打开的窗口具有与调用服务器相同的代码,并在每次卸载时检查打开器并在其中运行代码(如果存在)。

看来,如果关闭最后一个浏览器窗口,则IE会正确破坏连接,但是如果打开另一个窗口,则不会。

PS只是对上面的答案发表评论,AJAX并不是真正异步的。至少它的JS实现不是。发送请求后,您的JS代码仍将等待服务器的响应。它不会阻止您的代码执行,但是由于服务器可能需要一段时间才能响应(或者对于Windows终止IE窗口对象足够长的时间),因此您可能并且很可能会遇到上述问题。

2020-07-26