2012-01-18 27 views
12

Tôi có đoạn code sau đây để xử lý lỗi mặc định jQuery AJAX:jQuery.ajaxSetup: lỗi ghi đè với statusCode

$.ajaxSetup({ 
    error : function(jqXHR, textStatus, errorThrown) { 
     alert("Error: " + textStatus + ": " + errorThrown); 
    }, 
    statusCode : { 
     404: function() { 
      alert("Element not found."); 
     } 
    } 
}); 

Tuy nhiên, khi 404 xảy ra, cả hai chức năng này upcalled: thứ nhất lỗi, sau đó statusCode , vì vậy tôi thấy 2 cảnh báo liên tiếp.

Làm cách nào để ngăn chặn hành vi này và nhận được lỗi chỉ gọi lại nếu trạng tháiMã số không bị tăng tải?

+0

Bằng cách xóa statucCode.404? –

+1

Không. Tôi muốn một tin nhắn cụ thể trong trường hợp 404, và một cái mặc định khác. – weekens

+4

Tôi ở cùng bạn @weekens. Việc thiếu một 'else' trên các entry statusCode, hoặc vắng mặt, một số cách để gọi trình xử lý statusCode của bạn trước và cho phép nó chặn trình xử lý lỗi chung nếu muốn, làm cho toàn bộ tùy chọn statusCode IMO vô dụng. Chỉ có thể sử dụng được nếu bạn có các mục nhập statusCode cho mọi mã lỗi có thể, không hợp lý. Tôi hy vọng các folks jQuery xem xét lại kiến ​​trúc này. – enigment

Trả lời

23

Làm thế nào về chỉ kiểm tra cho mã trạng thái 404 trong xử lý lỗi của bạn?

$.ajaxSetup({ 
    error : function(jqXHR, textStatus, errorThrown) { 
     if (jqXHR.status == 404) { 
      alert("Element not found."); 
     } else { 
      alert("Error: " + textStatus + ": " + errorThrown); 
     } 
    } 
}); 
11

Hãy thử điều này:

$.ajaxSetup({ 
error : function(jqXHR, textStatus, errorThrown) { 
    if(jqXHR.status === 404) { 
     alert("Element not found."); 
    } else { 
     alert("Error: " + textStatus + ": " + errorThrown); 
    } 
} 
}); 
+1

+1. Nhưng == có vẻ tốt hơn === trong trường hợp này. – weekens