So supposedly starting at Firefox > 4, ràng buộc cửa sổ Đối tượng jQuery đến beforeunload
không hoạt động nữa.Gửi AJAX đến máy chủ trước khi tải
Điều tôi muốn làm là gửi một bài đăng AJAX để xóa dữ liệu memcache của máy chủ của tôi.
Khi tôi làm mới tab chỉ mở, tôi có thể thấy rằng sự kiện beforeunload
được gọi trong cả firefox và chrome bằng mã sau được minh chứng bằng thông báo console.log, "firefox/NON-firefox delete". Vấn đề là tôi không bao giờ thấy thông báo console.log "memcache delete" chỉ ra rằng máy chủ của tôi không bao giờ thấy yêu cầu $.ajax
.
Tôi nhận thấy việc đánh hơi trình duyệt là rất tệ và không có sự khác biệt giữa những gì được bao gồm trong câu lệnh if và else. Tôi chỉ đang hiển thị mã cho những gì tôi đã thử không thành công trong Firefox.
Bất kỳ ai có ý tưởng nào?
$(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
}
có ... cách tôi hiểu asynch gọi đây là những gì tôi nghĩ ... + 1 – cliffbarnes
@Jashwant, cảm ơn cho explanation.Though , Tôi có bằng chứng cho thấy xóa memcache đã thành công khi sử dụng Chrome sau khi đóng/mở lại trình duyệt, nhưng vẫn không ** xóa ** bằng firefox. Có vẻ như có một cái gì đó khác đang diễn ra ở đây .. sẽ chuyển đổi '$ .ajax' thành đồng bộ, 'async: false', trợ giúp? –
Dường như thay đổi [tùy chọn '$ .ajax' 'async' thành' false'] (http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings) sửa lỗi. Có lý do nào không muốn làm điều đó? –