728x90
반응형


1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
    type: "POST",
    url: submitUrl,
    data: $(form).serialize(),
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    success: function(data) {
        if(data.code == '0') {
            alert("code:"+ data.code + "\n" + "msg:" + data.msg);
        } else {
            alert("code:" + data.code + "\n" + "msg:" + data.msg);
        }  
    }
});

 


위처럼 jQuery의 ajax 메서드를 사용한다고 할 때 요청이 정상적으로 처리되었음에도 404 에러가 발생하는 경우가 있다.

(보통 이 에러는 브라우저의 개발자 도구 활성화 시에만 나타난다)


1
2
3
4
5
6
7
8
@RequestMapping("/faqDetailAjax")
public void faqDetailAjax(@RequestParam HashMap<String, String> params) {
    //로그인
    params.put("regstaff_id", "admin_test");
     
    params.put("view_cnt", "0");
    faqDao.insertFaq(params);          
}

 

컨트롤러가 AJAX요청을 받아서 처리만 하고 다시 돌려주는 값이 없어서 발생하는 에러다.

요청을 했는데 응답이 없으니 응답이 없다는 메세지가 나올 수 밖에. page(response) not found 서버놈이불러도대답이없어


Response 객체에 응답값을 설정해주면 404 에러는 발생하지 않는다. 이 때 데이터의 타입은 $.ajax() 옵션 중 dataType과 일치해야 한다.



1. 순수 서블릿

● JSONObject  - 관련라이브러리

1
2
3
4
5
$.ajax({
  ...
  dataType: "json",
  ...
});

 

응답값을 JSON 타입으로 처리하도록 설정하고 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import net.sf.json.JSONObject;
 
public class Dispatcher extends HttpServlet {
    doGet() { ..생략.. }
    doPost() { ..생략.. }
 
    protected void process(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
     
        JSONObject json = new JSONObject();
         
        json.put("code", "200");
        json.put("msg", "success");
         
        PrintWriter out = resp.getWriter();
        out.print(json);
    }      
}

 


● String

1
2
3
4
5
$.ajax({
  ...
  dataType: "text",
  ...
});

 

여기서는 dataType옵션을 json이 아닌 text로 설정한다.


1
2
3
4
5
6
protected void process(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
 
    PrintWriter out = resp.getWriter();
    out.print("'{code:\"200\", msg:\"success\"}'");
}

 


위 예제에서 응답 문자열이 JSON형식이라는 점을 이용, JSON객체로 변환하여 접근할 수도 있다.

1
2
3
4
5
6
7
$.ajax({
    ...
    success: function(data) {
    var jsonData = $.parseJSON(data);
        alert(jsonData.msg);
    }
});

 



2. 스프링

 @ResponseBody 어노테이션을 추가하고 맵형태로 아무값이나 던져준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RequestMapping("/faqDetailAjax")
@ResponseBody
public HashMap<String, String> faqDetailAjax(@RequestParam HashMap<String, String> params) {
    //로그인
    params.put("regstaff_id", "admin_test");
     
    params.put("view_cnt", "0");
    faqDao.insertFaq(params);          
     
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("code","1");
    map.put("msg", "등록하였습니다.");
    return map;
}

 


스프링에서도 서블릿 예제와 마찬가지로 String, XML 등으로 응답할 수 있다. 


 

728x90
반응형

'JQUERY > Debug' 카테고리의 다른 글

JSON.parse() 가 왜 에러  (0) 2014.09.05
DEBUG: AJAX 중 결과가 실시간으로 반영되지 않는 경우  (0) 2014.08.19
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,