【发布时间】:2012-03-03 09:11:21
【问题描述】:
我想在用户关闭浏览器窗口时通知服务器。
我都试过了
$(window).bind("beforeunload", function() {
$.get("${contextPath}/notify?direction=logout");
});
和
$(window).unload( function() {
$.get("${contextPath}/notify?direction=logout");
});
和
$(window).unload(function() {
$.ajax({
url: "${contextPath}/notify?direction=logout"
});
});
但两者都不能很好地工作,尽管手册中说它可能应该这样做。
在 Firefox 中,我只在窗口关闭时没有通知,但在页面刷新时有通知。在 Chrome 中我没有。
我尝试在 Firebug 或 Chrome 开发者工具中跟踪这个脚本,发现如果跟踪它就可以开始工作了!所以我认为它不能正常工作,因为它没有时间在窗口关闭或导航之前发送请求。
这是真的吗?如何完成我的任务?
解决方案
这行得通:
$(window).bind("beforeunload",
function() {
$.ajax({
async: false,
url: 'notify'
});
}
);
【问题讨论】:
-
第一个想法:AJAX 不适合这项工作。您应该使用 SJAX(同步),根据定义,AJAX 会释放 GUI 线程以继续处理 [在本例中为卸载]。
标签: javascript jquery notifications onbeforeunload onunload