我有一些(可能)长时间运行的 ajax 调用,如果用户导航到另一个页面,我想中止这些调用。以下 jQuery 代码在离开页面时对所有挂起的 XMLHttpRequest 对象调用中止:
$.ajaxSetup({
beforeSend: function(xhr) {
$(window).bind('beforeunload', function() {
xhr.abort();
});
}
});
在测试用例中,我强制等待 10 秒以等待被调用的服务器端操作。使用 Firebug,我确认当我单击页面上的任何链接时,上面的代码确实会导致所有挂起的 ajax 调用立即停止。但是,浏览器仍会等待整整 10 秒,然后才能转到下一页。 IE 似乎表现出相同的行为。这是已知的浏览器行为吗?在这种情况下,我能做些什么来让用户立即离开该页面吗?提前致谢。
最佳答案
感谢您的回复!事实证明,我完全错误地认为这是浏览器问题——问题出在服务器上。 ASP.NET 序列化需要 session 状态的同一 session 的请求,因此在这种情况下,在这些 ajax 发起的请求完成之前,下一页不会在服务器上开始处理。
不幸的是,在这种情况下,响应 ajax 调用的 http 处理程序中需要 session 状态。但是只读访问就足够了,所以通过用 IReadOnlySessionState 而不是 IRequiresSessionState 标记处理程序, session 锁不会被持有,问题就解决了。
希望这些信息对其他人有用。
关于javascript - 浏览器等待 ajax 调用完成,即使在调用 abort 之后(jQuery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/941889/