Tod*_*ier 29 javascript jquery xmlhttprequest onbeforeunload abort
我有一些(可能)长时间运行的ajax调用,如果用户导航到另一个页面,我想中止.以下jQuery代码在导航离开页面时调用所有挂起的XMLHttpRequest对象的中止:
$.ajaxSetup({
    beforeSend: function(xhr) {
        $(window).bind('beforeunload', function() {
            xhr.abort();
        });
    }
});
在测试用例中,我强制在被调用的服务器端操作上等待10秒.使用Firebug,我确认上面的代码确实导致所有挂起的ajax调用在我单击页面上的任何链接时立即停止.但是,浏览器仍然等待整整10秒,然后再转到下一页.IE似乎表现出相同的行为.这是一个已知的浏览器行为吗?在这种情况下,我能做些什么让用户立即离开页面?提前致谢.
Tod*_*ier 29
谢谢您的回复!事实证明,这是一个浏览器问题我完全错了 - 问题出在服务器上.ASP.NET序列化需要会话状态的同一会话的请求,因此在这种情况下,在完成这些ajax启动的请求之前,下一页不会在服务器上开始处理.
不幸的是,在这种情况下,响应ajax调用的http处理程序中需要会话状态.但是只读访问是足够好的,因此通过使用IReadOnlySessionState而不是IRequiresSessionState标记处理程序,不会保持会话锁定并且问题得到解决.
希望这些信息对其他人有用.
小智 12
关于托德自己对这个问题的回答......
我刚刚遇到PHP的这个问题,同样的解决方案也会有效.但是我需要会话中的信息.对于PHP开发人员,您可以session_write_close()在请求过程中调用close并写出您的会话.这将释放其他请求的会话.