So supposedly starting at Firefox > 4,绑定窗口jQuery对象beforeunload
不再工作。将AJAX发送到服务器之前undeunload
我想要做的是提交一个AJAX帖子来删除我的服务器的memcache数据。
当我刷新只打开的选项卡,我可以看到beforeunload
事件被称为在Firefox和用下面的代码由镀铬的消息的console.log,“火狐/ NON-火狐删除”就是明证。问题是,我从来没有看到console.log消息“memcache delete”,表明我的服务器从未看到$.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
}
是...我明白了非同步调用此路是我想... + 1 – cliffbarnes 2013-02-18 05:27:31
@Jashwant,为explanation.Though感谢,我有证据表明,在关闭/重新打开浏览器后使用Chrome时,memcache删除成功,但它仍然是**不是用firefox删除。这里似乎还有其他的东西......将'$ .ajax'转换为同步,'async:false',有帮助吗? – 2013-02-18 05:33:47
它看起来像将[$ .ajax'选项'async'更改为'false'](http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings)可以纠正问题。有没有什么理由不想这样做? – 2013-02-18 05:41:24