[jQuery] Ajax Global Error Handler 및 request header 설정법

식빵·2022년 10월 13일
0
post-thumbnail

방법1

$(function () {
    //setup ajax error handling
    $.ajaxSetup({
        error: function (x, status, error) {
            if (x.status == 403) {
                alert("세션이 만료되었습니다.");
                window.location.href ="/Account/Login";
            }
            else {
                alert("An error occurred: " + status + "nError: " + error);
            }
        }
    });
});
  • 이 방법은 좋기는 좋은데, 문제가 기존 $.ajax({}) 에서 error 를 직접 지정하면,
    해당 local error handler 는 무시된다
  • 만약 global error handler 와 local error handler 를 동시에 만족시키고 싶다면 방법2를 사용하자.



방법2

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    let error = options.error;
    options.error = function (jqXHR, textStatus, errorThrown) {
        
        // 전역 에러 해들링을 수행한다.
        console.log('global ajax error');
        
        // 만약에 $.ajax(...) 에서 error 메소드를 할당하지 않았다면
        // 이 if 문 안으로 들어가지 않는다. 
        if (typeof error === 'function') {
      
            // 만약에 그냥 local error handler 를 호출하고 싶지 않다면 아래
            // 문장도 쓰지 않으면 된다.
            return $.proxy(error, this)(jqXHR, textStatus, errorThrown);
        }
      
    };
});



TIP. 전역 헤더 세팅하기

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
  jqXHR.setRequestHeader("AJAX", true);
});
  • 참고로 jquery ajax 는 기본적으로 "X-Requested-With: XMLHttpRequest" 를 Header 에 넣어준다.
  • 그러니 ajax 요청을 jquery 를 통해서만 하면 굳이 위처럼 ajax 요청이라는 것을 명시적으로 헤더에 표기할 필요가 없다.



참고한 링크

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글