Yi *_*ang 36 javascript ajax events reliability
我需要一种方法来监控用户编辑会话,我正在审查的解决方案之一将让我使用unload
事件发送ajax请求以通知服务器编辑会话结束.(请参阅:监控用户会话以防止编辑冲突)
我对unload
事件的(相当有限的)读取表明附加到此处理程序的代码必须快速运行,因此通常用于清除对象以防止内存泄漏.
我的问题是,这可以为此目的提供足够的可靠性吗?
PS.我知道这个async: false
选项.
Ily*_*din 36
如果您的服务器足够快以响应,则此方法相当可靠.值得注意的事情.如果关闭浏览器并在卸载事件上发送AJAX请求,则很有可能在窗口对象被销毁之前,响应不会及时从服务器返回.在这种情况下(至少在IE中)会发生什么情况,它将孤立您的连接对象,并且在连接超时被触发之前不会正确终止它.如果您的服务器没有打开连接保持活动,关闭2个窗口(同时仍然打开另一个窗口),您将没有打开到服务器的连接(对于IE6-7,对于IE8 - 6个窗口)在达到连接超时之前,您将无法打开您的网站.
我遇到了类似的情况,之前我正在打开一个弹出窗口,在卸载时发送一个AJAX请求,它非常可靠,但它受到上述发布的困扰,我花了很长时间才跟踪它了解发生了什么.之后,我做了,我确保打开窗口将具有相同的代码来调用服务器,并且在每次卸载时检查开启器并在那里运行代码(如果它存在).
似乎如果你关闭最后一个浏览器窗口,IE将正确地破坏连接,但如果另一个窗口打开,它将不会.
PS只是为了评论上面的答案,AJAX并不是真正的异步.至少JS的实现不是.发送请求后,您的JS代码仍将等待来自服务器的响应.它不会阻止您的代码执行,但由于服务器可能需要一段时间才能响应(或者Windows足以终止IE窗口对象),您可能并且可能会遇到上述问题.
Sla*_*wek 12
你试过用吗?
var i = new Image(1,1);
i.src='http://...'
Run Code Online (Sandbox Code Playgroud)
并从服务器返回一些空图像.我认为应该可靠,脚本会阻止.顺便说一句:很高兴添加时间戳来防止缓存.