- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[AJAX] jquery 를 이용한 ajax 에서 바디에 json 데이터 처리 하기 본문
일반적으로 jquery를 사용하여 ajax를 처리하고자 하는 경우
그 파라미터를 get/post 의 파라미터로 전달된다.
이때의 컨텐츠 타입은 application/x-www-form-urlencoded 형태가 될 것이다.
JSON 을 전송하고자 하는 경우
단계층 key=value , key=value 의 식에 1레벨의 경우는 별 문제가 없다.
그러나 다계층을 가지고 있는 경우는 문제의 소지가 있다.
물론 이런 다계층의 JSON데이터를 일련의 파라미터로 변환하는 룰이 있긴 있다.
특히 jquery ajax에는 이런게 잘 고려가 되어 있다.
{"key1":"value1","key2":"value2","key3":[{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"}]}
이런 모양에 데이터를 전송하고자 하는 경우 jquery ajax 에서 다음과 같이 보내면 어찌 될까?
$.ajax({
url: "my.jsp",
type: "POST",
cache:false,
timeout : 30000,
dataType:"json",
data: {"key1":"value1","key2":"value2","key3":[{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"}]},
success: function(data) {
alert('success');
},
});
key1=value1&key2=value2&key3%5B0%5D%5Ba%5D=a&key3%5B0%5D%5Bb%5D=b&key3%5B1%5D%5Ba%5D=a&key3%5B1%5D%5Bb%5D=b&key3%5B2%5D%5Ba%5D=a&key3%5B2%5D%5Bb%5D=b&key3%5B3%5D%5Ba%5D=a&key3%5B3%5D%5Bb%5D=b
이런식에 포스트 데이터가 전송된다. 물론 이런식에 GET방식도 잘 전송 될 것이다.
이걸 좀 보기 좋게 늘어 놓으면
key1=value1
key2=value2
key3[0][a]=a
key3[0][b]=b
key3[1][a]=a
key3[1][b]=b
key3[2][a]=a
key3[2][b]=b
key3[3][a]=a
key3[3][b]=b
이런식이 된다.
수신처 에서 이걸 다시 계층적으로 만들면 될 문제이나 이건 배보다 배꼽이 큰 경우라 하겠다.
그래서 JSON데이터를 그대로 서버에 전송하고자 하는 것이다.
이때 쓸 수 있는 방법은
1) 특정 POST 파라미터에 JSON 스트링 전송
2) POST 바디 자체에 JSON 스트링 전송
우리는 2번의 방법으로 전송하고자 하는 것이다.
근데 Jindo 에서는 이런 문제는 껌이다.
function getList() {
var oAjax = new jindo.$Ajax('my.jsp', {
type : 'xhr',
method : 'post',
onload : function(res){
alert("success!");
},
timeout : 3,
postBody : true
});
oAjax.header("Content-Type","application/json");
oAjax.request({"key1":"value1","key2":"value2","key3":[{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"}]});
}
무슨 옵션인지 보았는가?
"postBody : true"
이 옵션으로 우리가 고려하고자 하는 문제는 깔삼하게 처리 되었다.
근데 jquery는?
function getList() {
$.ajax({
url: "my.jsp",
type: "POST",
cache:false,
timeout : 30000,
contentType:"application/json; charset=UTF-8",
dataType:"json",
data: JSON.stringify({"key1":"value1","key2":"value2","key3":[{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"},{"a":"a","b":"b"}]} ),
success: function(data) {
alert('success');
}
});
}
그렇다. data 에 스트링 데이터를 넘기는 거다!
JSON.stringify() 를 이용하여 JSON 데이터를 스트링으로 전환하여 전송한다.
서버에서는 request.getInputStream() 으로 읽어 들여 JSON데이터를 파싱하면 된다.
근데 jindo 와 jquery 간에 히한한 문제는 다른 곳에 있었다.
우리가 Accept 를 조절 하고자 할경우
즉 Accept 가 'application/json' 이 되고자 하는 경우는 신기하게도
jquery 는 위와 같이 dataType:"json" 하는 것만으로도 바뀐다. 그러나 jindo 의 경우는
oAjax.header("Accept","application/json");
이렇게 Accept 를 지정해야 한다.
'★─Programing > ☆─WebProgram' 카테고리의 다른 글
[jQuery] bind(), unbind(), trigger() (0) | 2016.06.09 |
---|---|
[HTML] 파일첨부시 특정 파일확장자만 선택하게 하기 (1) | 2016.06.07 |
[jQuery] Jquery Value() 값 가져오기, 설정하기 (0) | 2016.06.03 |
[XML] XML 치환을 위한 특수문자 HTML Codes (0) | 2016.06.01 |
[MyBatis] 동적 쿼리 (if, choose) (0) | 2016.05.31 |