익스플로러와 크롬의 response.setStatus() 파싱 차이로 인한 삽질...

2014. 11. 3. 16:35공부

우리는 흔히 아래와 같은 코드로 ajax 호출을 시도합니다..

( jQuery 신이시여 감사합니다. )


    $.ajax({

      type: 'POST',

      dataType: 'text',

    url: callURL,

    data:  $('#onBoardForm').serialize(),

      success: function ( text ) {

        alert( text );

        opener.location.replace( "${pageContext.request.contextPath}/list.jsp" );

        self.close();

      },

      error: function ( request, status, error ) {

        alert( request.responseText );

      }



success 는 호출한 서버측에서 200 ok ( 202 도 되나 ) 를 주면 타게 되고.

error 은 각종 404, 500, 등등의 에러코드를 response.setStaus() 로 주면 타게 됩니다...

그래서 흔희 아래와 같은 코드를 서버쪽에서 작성하게 되지요.


response.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );

response.getWriter().write( "VNF Instance 생성 권한이 없습니다." );

return;



그런데.. 문제가 생겼습니다.

파일 업로드를 ajax로 작성하고, 이미 파일이 있다는 의미로, response.setStatus("HttpServletResponse.SC_INTERNAL_SERVER_ERROR") 를 줬습니다.

HTTP 302 에러죠..


크롬으로 코딩하면서 술술 넘어갔습니다....

error 코드를 제대로 탔거든요..

하지만 explorer 로 테스트를 하자 문제가 생겼습니다.

success 도 타지 않고, error 도 타지 않고, pending 이 걸리는 문제가 생겼죠..


아마도 HTTP response code 별로 각 브라우저가 해석하는 방법이 조금 다른 듯 싶습니다.

시간도 없고, 빨리 처리해야 해서, 그냥 500 에러를 던지고 처리하는 방법을 택했는데..

시간이 나면 Http response code 별로 브라우저들이 어떻게 처리하는지 알아보는게 좋을 듯 하네요..


덕분에 삽질 좀 했습니다.