티스토리 뷰

출처: http://aljjabaegi.tistory.com/148 [알짜배기 프로그래머]


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발생)



출처: http://aljjabaegi.tistory.com/148 [알짜배기 프로그래머]




이분께 무한 감사를 표한다. 미루고미루다 문제해결을 해야될 때가 왔을 때 기적처럼 제게 오신 당신은 앞으로 모든 일이 행복하시고 만수무강하시길...!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함