[Servlet] Ajax 요청 처리가 완료되었는데도 404에러가 발생할 때
$.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);
}
}
});
이런 코드가 있을 때, AJAX 요청에 대한 처리가 정상적으로 완료되어도 브라우저에 404 에러로 표시되는 경우가 있다.
@RequestMapping("/faqDetailAjax")
public void faqDetailAjax(@RequestParam HashMap<String, String> params) {
//로그인
params.put("regstaff_id", "admin_test");
params.put("view_cnt", "0");
faqDao.insertFaq(params);
}
이는 서버에서 아무것도 응답하지 않기 때문이다. Response 객체에 응답값을 설정해주면 404 에러는 발생하지 않는다.
example 1: JSONObject
$.ajax({
...
dataType: "json",
...
});
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);
}
}
example 2: String
$.ajax({
// 생략
dataType: "text",
success: function (data) {
var jsonData = $.parseJSON(data);
alert(jsonData.msg);
}
});
protected void process(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.print("'{code:\"200\", msg:\"success\"}'");
}
example 3: 스프링
@ResponseBody
어노테이션을 추가하고 아무값이나 던져준다. View를 따로 설정하지 않으면 기본 설정인 JsonView 클래스를 이용해서 파싱한 값을 응답한다. (spring3: jackson, spring4: gson)
@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;
}