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 | importnet.sf.json.JSONObject;publicclassDispatcher extendsHttpServlet {    doGet() { ..생략.. }    doPost() { ..생략.. }    protectedvoidprocess(HttpServletRequest req, HttpServletResponse resp)        throwsServletException, IOException {            JSONObject json = newJSONObject();                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 | protectedvoidprocess(HttpServletRequest req, HttpServletResponse resp)        throwsServletException, IOException {    PrintWriter out = resp.getWriter();    out.print("'{code:\"200\", msg:\"success\"}'");} | 
위 예제에서 응답 문자열이 JSON형식이라는 점을 이용, JSON객체로 변환하여 접근할 수도 있다.
| 1 2 3 4 5 6 7 | $.ajax({    ...    success: function(data) {    varjsonData = $.parseJSON(data);        alert(jsonData.msg);    }}); | 
2. 스프링
@ResponseBody 어노테이션을 추가하고 맵형태로 아무값이나 던져준다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @RequestMapping("/faqDetailAjax")@ResponseBodypublic 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 = newHashMap<String, String>();    map.put("code","1");    map.put("msg", "등록하였습니다.");    returnmap;} | 
스프링에서도 서블릿 예제와 마찬가지로 String, XML 등으로 응답할 수 있다.
728x90
    
    
  반응형
    
    
    
  'JQUERY > Debug' 카테고리의 다른 글
| JSON.parse() 가 왜 에러 (0) | 2014.09.05 | 
|---|---|
| DEBUG: AJAX 중 결과가 실시간으로 반영되지 않는 경우 (0) | 2014.08.19 | 
