티스토리 뷰
JSON 문법검사기
Cross browser 에서의 흥미로운 예제들
IE8
JSON.parse(”{ ‘a’:1 }”)
: Syntax Error
CHROME
JSON.parse(”{ ‘a’:1 }”)
: OK
FF
JSON.parse(”{ ‘a’:1 }”)
: Syntax Error
OPERA 10.10
JSON.parse(”{ ‘a’:1 }”)
: Undefined variable JSON
SAFARI 4.0.4
JSON.parse(”{ ‘a’:1 }”)
: Syntax Error
jQuery 1.3 까지는 고유의 parsing 기술이 쓰이기에
1: $.ajax({url: "/url",
2: dataType: "json",
3: success: function(json) {
4: // json 변수로 바로 접근 가능
5: }
6: });
위와 같이 바로 사용이 가능했는데
jQuery 1.4 부터는 브라우저 고유의 JSON parsing 기술에 맞겨버린다.
그렇다면...
모든 브라우저에서 문법오류가 안나게하려면?
방법1. 쌍따옴표(“)로 키와 값 모두 감싸라~!
페이지의 글 하단의 의견을 보면
var a = {“hello” : “world” }
와 같이 쌍따옴표로 키와 값을 모두 감싸야만 JSON 이라고 한다.
그래서 FF 에서만 개발중이던
var a = {hello : “world” } 형태의 JSON을
IE 에서 인식시켜보려 했더니 parse 오류만을 내뱉었다.
그래서 쌍따옴표로 모두 감싸줘 보니
잘 작동하였다.
방법2. jQuery 1.4
1: $.ajax({url: "/url",
2: dataType: "text",
3: success: function(data) {
4: json = eval("(" + data + ")");
5: // do something with json
6: }
7: });
그냥 text 형식으로 가져온 뒤 eval 함수를 통해 변형한다.
보내는쪽의 Content-type 은 application/json 이든 html/text 이든 관계 없다.
보내는쪽 형식만 {키:값} 이면 된다.
방법3. Prototype
1: new Ajax.Request(url,
2: {
3: method:'post',
4: parameters:$('frm').serialize(),
5: onSuccess: function(trans) {
6: var json = trans.responseText.evalJSON(); // 또는 .toJSON();
7: }
8: });
이건 구글링 안하고도 처리 했던 방식.
그때 마음은 그냥 IE 때문에 Content-type = application/json 을 포기했다랄까...
방법4. Prototype 1.6 이상
1: // 글 목록에서 체크상자로 선택된 글 처리
2: new Ajax.Request(url, {
3: method: 'post', parameters: Form.serializeElements($('frm_list').getInputs('checkbox','chk_id')),
4: onLoading: function() { $('frm_list').startWaiting(); },
5: onComplete: function() { $('frm_list').stopWaiting(); },
6: onSuccess: function(trans) {
7: var json = trans.responseJSON;
8: if(json.code == "1") {
9: alert(json.msg);
10: }
11: }
12: });
응답 url 쪽의 헤더는 Content-type = application/json 로 선언해줘야 한다.
응답 받는것을 .responseJSON 으로 받아주면 브라우저 구분이나 형식오류 없이 잘 동작한다.
Prototype 1.6 부터 이 부분을 패치한듯 하다.
Javascript 변수로 JSON Object 만들기
1: // jQuery Submit
2: $j.ajax({
3: url:"/member/?mode=update", type:"post", data:frm.serialize(), dataType:"text",
4: success: function(rp) {
5: var json = eval("("+ rp +")");
6: if(json.code == 1) { // 입력완료
7: self.location = url;
8: } else { // 입력오류
9: if (json.id) {
10: // 이 부분이 핵심
11: eval('var valErr={"'+json.id+'":"'+json.msg+'"};');
12: joinValidate.showErrors(valErr);
13: } else $j.jGrowl("입력 처리중 "+ json.msg +" 오류 발생!");
14: }
15: }, error: function(rp, status) { $j.jGrowl('회원가입 처리중 '+ status +' 오류 발생!'); }
16: });
'웹프로그래밍 > js' 카테고리의 다른 글
[javascript] 문자 찾기 (0) | 2010.04.08 |
---|---|
[jQuery] load 한글깨짐 없게 (0) | 2010.03.20 |
[jQuery] DateTime Picker (0) | 2010.01.23 |
[jQuery] validate showErrors 로 에러메세지 출력 (0) | 2010.01.14 |
[Prototype] JSON과 setValue 로 폼 요소들 값 채우기 (0) | 2010.01.08 |
- Total
- Today
- Yesterday
- Make Use Of
- How to geek
- 인터넷 통계정보 검색시스템
- 트위터 공유 정보모음
- 웹표준KR
- 치우의 컴맹탈출구
- Dev. Cheat Sheets
- w3schools
- Dev. 조각들
- ASP Ajax Library
- CSS Tricks
- WebResourcesDepot
- jQuery Selectors Tester
- DeveloperSnippets
- Smashing Magazine
- Nettuts+
- devListing
- 웹 리소스 사이트(한)
- Mobile tuts+
- Dream In Code
- Developer Tutorials
- CSS3 Previews
- 자북
- 안드로이드 사이드
- Code Visually
- Code School
- SQLer.com
- 무료 파워포인트 템플릿
- iconPot
- Free PowerPoint Templates
- Design Bombs
- Web Designer Wall
- 1st Webdesigner
- Vandelay Design
- 무료 벡터 이미지 사이트들
- Tripwire Magazine
- Web TrendSet
- WebMonkey
- 윤춘근 프리젠테이션 디자이너 블로그
- cz.cc 무료 DNS
- [웹하드] MediaFire
- [웹하드] DivShare
- 한컴 인터넷 오피스
- laravel
- JQuery
- mssql
- API
- 워드프레스
- Wordpress
- CSS
- git
- ASP
- sencha touch
- iis
- javascript
- Docker
- IE
- IOS
- iphone
- classic asp
- centos
- Mac
- 안드로이드
- 한글
- Chrome
- nodejs
- JSON
- PHP
- Prototype
- Linux
- Debug
- Android
- nginx
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |