Programing/ajax

ajax success 넘어가지 않을때 해결방법 @ResponseBody 에 대하여

리커니 2015. 9. 9.
반응형

 

ajax success 넘어가지 않을때 해결방법 @ResponseBody 에 대하여

 

전자정부프레임워크의 Spring 구조에서 ajax 사용 시 통신은 이상없이 이루어지는데

success로 넘어가지 않는 문제가 발생했다.

 

DB저장도 되고, 데이터도 리턴해 주는데 ajax의 success로 넘어가지 않는 것이다.

 

문제는 controller에서의 @ResponseBody 를 해주지 않았기 때문!

 

몇날 몇일동안 왜안될까를 고민 했었는데

원인은 한줄이였다.

 

복사해 쓸줄만 알았지 기본지식의 부족을 다시한번 느꼈다.

  

ajax 에서 success로 넘어가는 조건은 http 요청에 성공했을 경우이다.

그런데 @RequestMapping 메서드에 적용되면 해당 메소드의 리턴값을  http 응답데이터로 사용하는 @ResponseBody를

빼먹었으니 요청데이터가 없었던것 같다.

 

그럼 @RequestBody  와 @ResponseBody 에 대해서 알아보자.

 

@RequestBody 와 @ResponseBody 어노테이션은 각각 HTTP 요청 몸체를 자바 객체로 변환하고 자바 객체를 HTTP 응답 몸체로 변환해주는데 사용된다.

 

@RequestBody 어노테이션을 이용하면 HTTP 요청 몸체를 자바 객체로 전달 받을 수 있다. @RequestMapping 에 의해 POST 방식으로 전송된 HTTP 요청 데이터를 String 타입의 body 파라미터로 전달한다.

 

@ResponseBody 어노테이션을 이용하면 자바 객체를 HTTP 응답 몸체로 전송 할 수 있다. @RequestMapping 메서드에 적용되면 해당 메소드의 리턴값을 HTTP 응답데이터로 사용한다.

 

문제가 발생했던 jsp

해당 ajax에서는 아무 문제가 없다. 아무 문제가 없는데 success로 넘어가지 않았다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$.ajax({
    type : 'POST',  
    dataType : 'json'
    data:param,
    url : '${ctx}/mobileReq/regMobileReq.do',
    success : function(Data){
         if(Data.resultCode==200){
              alert("성공");
              location.replace("${pageContext.request.contextPath}/request/MobileReq.do")
         }else if(Data.resultCode==300){
              alert("실패");
              location.replace("${pageContext.request.contextPath}/request/MobileReq.do")
         }
    },
    error:function(e){
         if(e.status==300){
              alert("단말기 신청을 하는데 실패하였습니다.");
              location.replace("${pageContext.request.contextPath}/request/MobileReq.do")
         }
        } 
   }); 
cs

 

원인이였던 controller

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@ResponseBody    <- 원인이었던 @ResponseBody
 @RequestMapping(value="/mobileReq/regMobileReq.do", method = RequestMethod.POST, produces="text/plain;charset=UTF-8")
 public String regMobileReq(MobileReqVO mobileReqVO, HttpServletRequest request, HttpServletResponse response, ModelMap model)throws Exception {
 
  Gson gson = new Gson();
  MobileReqSet set = new MobileReqSet();
  try{
           getMobileReqService.regMobileReq(mobileReqVO);
           set.setResultCode(200);
           set.setResultMsg("LOGIN_SUCCESS");
  }catch(Exception e){
           e.printStackTrace();
           set.setResultCode(300);
  }
        return gson.toJson(set);
 }
cs

-- 참고로 ajax 사용 시 이유 없이 error가 날 경우에는

async:false 옵션을 주세요. 이것만으로도 해결될 때가 있습니다.

(버튼클릭에 ajax를 걸어둬 중복호출될 경우 error발생)

 

반응형

댓글

💲 추천 글