Tôi đã phải đối phó với cùng một trường hợp sử dụng ngày hôm nay. Ứng dụng tôi đang làm việc có các cuộc gọi ajax kéo dài này có thể bị gián đoạn bởi 1) người dùng điều hướng đi hoặc 2) một số loại kết nối tạm thời / lỗi máy chủ. Tôi muốn trình xử lý lỗi chỉ chạy khi kết nối / lỗi máy chủ chứ không phải cho người dùng điều hướng đi.
Lần đầu tiên tôi thử câu trả lời của Alastair Pitts, nhưng nó không hoạt động vì cả hai yêu cầu bị hủy bỏ và lỗi kết nối đều đặt mã trạng thái và readyState thành 0. Tiếp theo, tôi thử câu trả lời của sieppl; cũng không hoạt động vì trong cả hai trường hợp, không có phản hồi nào được đưa ra, do đó không có tiêu đề.
Giải pháp duy nhất phù hợp với tôi là thiết lập trình lắng nghe cho window.onbeforeunload, thiết lập một biến toàn cục để cho biết rằng trang đã được tải xuống. Sau đó, trình xử lý lỗi có thể kiểm tra và chỉ gọi trình xử lý lỗi nếu trang chưa được tải xuống.
var globalVars = {unloaded:false};
$(window).bind('beforeunload', function(){
globalVars.unloaded = true;
});
...
$.ajax({
error: function(jqXHR,status,error){
if (globalVars.unloaded)
return;
}
});