据说从Firefox > 4开始,将窗口jQuery对象绑定到beforeunload
不再起作用。
我想要做的是提交一个AJAX post请求来删除我的服务器的memcache数据。
当我刷新唯一打开的选项卡时,我可以看到beforeunload
事件在Firefox和Chrome中都被调用,并显示如下代码的console.log消息:"firefox / NON-firefox delete"。问题在于,我从未看到"memcache delete"的console.log消息,这表明我的服务器从未接收到$.ajax
请求。
我知道这样做浏览器嗅探很糟糕,并且if和else语句包含的内容没有任何区别。我只是展示了我在Firefox中尝试但不成功的代码。
有人有什么想法吗?
$(window).bind('beforeunload', function(){
if(/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) {
console.log('firefox delete');
memcacheDelete();
return null;
}
else {
console.log('NON-firefox delete');
memcacheDelete();
return null;
}
});
function memcacheDelete() {
$.ajax({
url: "/memcache/delete",
type: "post",
data:{},
success:function(){
console.log('memcache deleted');
}//success
}); //ajax
}
$.ajax
转换为同步的async:false
是否有帮助? - tim peterson$.ajax
选项中的async
改为false
可以解决这个问题。有什么理由不这样做吗? - tim peterson