2013-08-01 17 views
13

tôi thích bắt bất kỳ ngoại lệ ajax 401 Unauthorised nào, nhưng không thích thay đổi tất cả các truy vấn ajax của tôi. Có cách nào để thay đổi nó cho bất kỳ cuộc gọi .ajax $ như (ghi đè lên bất kỳ xử lý error)?JQuery bắt gặp bất kỳ lỗi ajax nào

+3

sử dụng google sẽ mang lại cho bạn một câu trả lời trong vài giây: '$ .ajaxSetup ({ statusCode: { 401: function() {// này sẽ bắt bất kỳ và tất cả các access denied lỗi }} }) ; ' –

Trả lời

20

bạn có thể sử dụng các handler ajax toàn cầu .ajaxError()

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status== 401) { 
        $("div.log").text("Triggered ajaxError handler."); 
    } 
}); 
+0

Một số lần' jqxhr' là null, nhưng giải pháp palaѕн làm việc cho tôi. – mtoloo

+0

Từ bất kỳ lý do gì khi tôi sử dụng đoạn mã này, staus luôn là 0. Bất kỳ ý tưởng nào? – Dave

11

Bạn có thể làm một cái gì đó như thế này:

$(function() { 
    $.ajaxSetup({ 
     error: function(jqXHR, exception) { 
      if (jqXHR.status === 401) { 
       alert('HTTP Error 401 Unauthorized.'); 
      } else { 
       alert('Uncaught Error.\n' + jqXHR.responseText); 
      } 
     } 
    }); 
}); 

này sẽ bắt lỗi trong bất kỳ ajax cuộc gọi của bạn.

+2

nó sẽ thất bại trong trường hợp nếu một cuộc gọi ajax đã gọi lại 'lỗi' được chỉ định trong các tùy chọn như' $ .ajax ({url: '', error: function() {}}) ' –

2

Các $.ajaxSetup() chức năng sẽ cho phép bạn chỉ định tùy chọn toàn cầu cho các cuộc gọi Ajax. Tuy nhiên, hãy cẩn thận vì các cuộc gọi khác tới ajaxSetup() sẽ ghi đè tùy chọn toàn cầu và các tùy chọn cục bộ được chỉ định cho phương thức ajax() sẽ ghi đè cài đặt chung.

Documentation

2

Để bắt một mã 401 tình trạng chỉ cần thêm

$.ajaxSetup({ 
    statusCode: { 
     401: function(err){ 
     console.log('Login Failed.', err.responseJSON); 
     // or whatever... 
     } 
    } 
    }); 

vào trang của bạn ở đâu đó trước khi cuộc gọi AJAX là bắn.