2013-08-01 15 views
13

lubię złapać dowolny wyjątek ajax 401 Unauthorised, ale nie lubię zmieniać wszystkie moje zapytania ajax. Czy istnieje sposób, aby to zmienić dla dowolnego połączenia $ .ajax jak (nadpisać dowolny obsługi error)?JQuery złapać dowolny błąd ajax

+3

używając google przyniesie Ci odpowiedź w ciągu kilku sekund: '$ .ajaxSetup ({ statusCode: { 401: function() {// to złapie wszelkie odmowa dostępu błędy } } }) ; ' –

Odpowiedz

20

można skorzystać z obsługi zdarzeń globalny ajax .ajaxError()

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

Czasami' jqxhr' ma wartość null, ale rozwiązanie dla mnie zadziałało. – mtoloo

+0

Z jakiegokolwiek powodu, kiedy używam tego fragmentu, staus ma zawsze 0. Jakieś pomysły? – Dave

11

można zrobić coś takiego:

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

to złapie błąd w którymkolwiek z połączeń ajax.

+2

to się nie powiedzie w przypadku, gdy wywołanie ajax ma wywołanie "błąd" określone w opcjach takich jak '$ .ajax ({url: '', error: function() {}})' –

2

Funkcja $.ajaxSetup() pozwoli Ci określić globalne opcje Ajax wzywa. Należy jednak zachować ostrożność, ponieważ inne połączenia z ajaxSetup() nadpisują opcje globalne, a określone opcje lokalne w metodzie ajax() zastąpią ustawienia globalne.

Documentation

2

złapać kod 401 stan po prostu dodać

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

na swojej stronie gdzieś przed wywołanie AJAX jest zwolniony.