Ajax 데이터의 형식

Ajax 2009.12.11 17:34

Ajax 데이터의 형식

ajax는 서버에서 사용되는 프로그래밍언어와는 별개이다. 따라서 서버의 언어가 무엇인지는 관계없다. 그럼여기서 데이터 형식으로 어떤것이사용되는지 알아보자.

text문서

가장 간단한 것이다 앞서 설명한 예제에서 클릭하면 텍스트 문서내의 내용이 호출되도록 해보았다.

HTML

작은코드의 구현으로 일부분을 사용하는것이다. 전체 한페이지에서 우리가 아는HTML이 아닌 재사용할 일부를 만들어놓고 이를호출할수 있다.

XML

XML은 만들어진지도 오래됬고 그만큼 이미 웹상에서 모든곳에서 통용된다.플리커,등의 사이트등의 사이트에서는 XML 방법으로 데이터를 전송한다.

JSON

JSON자바스크립트를 기반으로 한다.javascript object notation의 약자이다.간결한구조에 재사용하기쉽고 로드하기도 좋다.하지만 문법이까다롭고 하나의 콤마오류가 심각한 문제를 초래하기도 한다.

ajax를 대충 출어보면서

ajax가 무엇이고 작동하는원리 그리고 그에 따라 사용할 데이타 형식을 알아봤다.어디까지나 일부분이고 또 이건 jquery에서 ajax를 설명하기위해 요약했을 뿐이다. 다음엔 다시 jquery로 넘어가서 ajax를 어떻게 사용하나 알아보겠다.

저작자 표시
신고

설정

트랙백

댓글

HttpRequest 객체

Ajax 2009.12.10 21:39

자바스크립트객체 HttpRequest

브라우저의 다른 작업을 방해하지않으면서 서버에 데이터를 요청할수 있게하는 HttpRequest..이번엔 그 객체를 직접 만들어보자

인스턴스 만들기

대부분의 브라우저에서는 다음과 같이 간단히 시작할 수 있다

xhr = new XMLHttpRequest();

여전히 걸림돌은 IE이다.익스플로어의 경우는 액티브X인스턴스를 만들어야된다.

 xhr = new ActiveXObject("Microsoft.XMLHTTP");

자 그럼 일반적으로 내장객체지원하는 브라우저 그리고 그렇지않은 익스플로어를 구분하고 그에따라 위에서 생성한 적절한것을 사용하도록 해야할 것이다. 그럼 이때 필요한것은? 당연히 조건문..

//XMLHttpRequest를 지원할 경우
if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
  } 
//아니면 액티브X  
else if (window.ActiveXObject) {
   try {
   xhr = new ActiveXObject("Msxml2.XMLHTTP");  
 } 

마지막으로 볼것은 이제까지 설명한것에 대해 브라우저가 액티브X를 지원한다고 해서 ajax를 위한 특정한 액티브X 객체가 있다는 보장은 없다, 따라서 검색해보고 그에따른 적절한 액티브X를 사용할 수 있도록 하는것이다.이때 try..catch를 사용한다.

try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }

최종 완성된 인스턴스를 점검해보자

function getHTTPObject() {
  var xhr = false;
  //코드를 작석항때마다 반복코드작업을 피하기위해
  //변수로 선언하고 판별가능하도록 했다.
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
    //내장객체 인스턴스
  } else if (window.ActiveXObject) {
    //아니면 액티브X 객체의 인스턴스
    try {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        xhr = false;
      }
    }
  }
  return xhr;
}

서버와 통신

요청

XMLHttpRequest 인스턴스를 만든후 서버와 통신하기해 먼저 요청해보자

function grabFile(file) {
  var request = getHTTPObject();
  if (request) {
    request.onreadystatechange = function() {
    //onreadystatechange 새로고쳐 요청
      displayResponse(request);
    };
    //비동기요청 open메소드 
    request.open("GET", file, true);
    //보내기
    request.send(null);
  }
}
  • ajax에거 헤더 정보를 보내는 기능onreadystatechange
  • open메소드 : 단순한 파일을 받을때는 GET, 데이터를 받을때는 POST,두번째인자 는 url,마지막은 비동기로할것인지 결정
  • 데이타가 아닌 GET으로 파일요청시 아무것보내지않는다.

응답 readyState

readyState는 ajax에 요청 상태를 나타낸다.0~4 다음과 같은갑을 가진다.
0:초기화되지않음
1:open메소드 호출
2:open메소드 호출, send메소드호출, 송신완료 요청시작
3:수신중
4:수신완료

실제 사용하기위해서 위의 상태에서 우리는 값4 즉 수신완료가정하에 작업되어야 한다.다음예제를 보자

function displayResponse(request) {
if (request.readyState == 4) {
//수신완료 될경우
if (request.status == 200 || request.status == 304) {
 어쩌고 저쩌고 수행할 작업
}}}

위에서 request.status는 무엇인가?이것은 서버상태코드를 말한다.흔히 우리가 사이접속에러시 404에러 Not Found를 한번쯤은 보았을꺼다, 또403 forbidden등 이런 상태를 보았을것이다.이번호가 지정해놓은 상태를 말해주는 코드이다.위에서 200,304의 의미는 성공적응답을 말하는 것이다.

마지막으로 수행할작업을 넣어주면된다

function displayResponse(request) {
if (request.readyState == 4) {
//수신완료 될경우
if (request.status == 200 || request.status == 304) {
//성공적 응답
 alert(request.responseText);//작업
}}}

예제보기

앞에서 사용한것을 적용해보자 송수신할 것은 텍스트 문서 이고 예제를보자


여기를 클릭

결과는 여기서확인 http://sianasiatiger.cafe24.com/study/A_ajaxbasic.html

저작자 표시
신고

설정

트랙백

댓글

Ajax와 HttpRequest

Ajax 2009.12.09 21:52

Ajax와 HttpReqyest, 자바스크립트객체

먼저 저번에 둘러봤던 ajax에 대해 다시한번 돌아보자

일반적인 웹어플리케이션 동작
  1. 페이지에서 이벤트발생
  2. 서버에 요청
  3. 일반적으로 HTML로 결과를 응답받는다
  4. 페이전체가 리로드(바뀐다)된다
Ajax 웹어플리케이션 동작
  1. 페이지에서 이벤트발생
  2. 서버에 요청
  3. XML,텍스트 등으로 결과를 응답받는다
  4. 필요한 페이지 일부가 리로드(바뀐다)된다

단 다음을 반드시 명시하자

  • 기본적으로 html+css가 페이지를 구성한다
  • 브라우저가 요청과 응답하는것이다.
  • 자바스크립트 객체의 역할은 요청과 응답이 아니라 요청을 동기화시키고 들어온 응답을 처리한다.

XMLHttpRequest

앞에서 본 자바스크립트 개체의 역할은 클라이언트와 서버사이통신을 담당한다고 할수 있겠다.이런 객체가 처음 만들어진것은 XMLHttp였고 우리가 흔히 알고 있는 액티브X(activeX)형태로만 사용할 수 있었다.하지만 잘 알다 시피 액티브X는 많은 문제를 야기시켰고 특히국내는 빨리 만들어야 하는시점에서 남용되었다.

한편 다른 브라우저들은 XMLHttprequyest 객체를 모질라측에서 개발하게되고 내장하는방법으로 사용하게되었고 이후 대부부의 내장객체로 사용되게된다.(IE6를 제외하고 최근 브라우저 대부분은 내장객체로 지원한다.파록,사파리,오페라...등)

병맛 IE6

문제는 css가 익스플로어6에서 적용되지않거나 버그등이있듯것처럼, 아직까지 사용되는IE6 는 액티브X를 사용한다.물론 앞으로 설명할 ajax에 간단한 예제 대해서는 방법이있다. 하지만 이것때문에 아직도 많은 전문 개발자들이 쓸데없는 문제를겪고 있다.

두번째 ajax포스팅을 마치면서 하루빨리 IE6가 사라지길 바란다.......

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM empty clone 메소드 복사하기

jQuery/DOM&jQuery 2009.11.28 21:20

jQuery DOM clone 메소드

.clone()은 엘리먼트를 복사하는 메소드이다.

클론은 이벤트 또한 복제하는데 하나하나 살펴보자

아메바......

위의 엘리먼트를 복제해보자

$('p').clone();

자 위의것 대로 하면 될것같지만 복사해서 놓을 위치를 정해줘야 된다. 그래서 .insertAfter()등의 메소드를 사용한다.

$('p').clone().insertAfter('p');

위와같이하면아래와같이 복사되어 나올것이다

아메바......

아메바......

이벤트까지 복제

이벤트 까지 복제하는예제를 보자.변수에 true를 넣으면 이벤트까지복제 반대로 false를 넣어주면 엘리먼트만 복제된다.


위의 버튼을 누르면 복제되도록하려면

  $('button').click(function() {
     //button 엘리먼트에 접근 클릭시 이벤트발생
      $(this).clone(true).insertAfter(this);
     //this 즉 button엘리먼트를 복사해서 그뒤에 붙임
     // clone(true)로 이벤트까지 복사
    }); 

이러면 클릭시 옆에 새로 버튼이 나올거고 또 그버튼을 클릭하면 또 복사되어 나올것이다.

예제릐 결과를 보고싶다면 아레로 가보자

http://sianasiatiger.cafe24.com/study/D_clone.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM empty remove 메소드 제거하기

jQuery/DOM&jQuery 2009.11.25 15:12

jQuery DOM empty remove 메소드

제거하기위한 메소드로는 .empty().remove()가 있다..empty()의경우는 검색된 요소안의 모든 엘리먼트를 제거하고 .remove()의 경우는 검색된 엘리먼트와 자식들을 제거한다.차례대로 보자

empty 메소드

empty메소드는 비운다는 말 그대로 모든걸 지운다.해당엘리먼트의 자식과 텍스트모두 제거한다

모두 사라 집니다.

위의 코드에 아래를 삽입하면 아무것도 나오지 않는다.

$('p').empty();
//p란 엘리먼트에 접근후 
//p엘리먼트의 자식과 텍스트 제거

remove 메소드

이메소드는 접근하여 검색된 엘리먼트와 자식,텍스트를 제거한다.

사라짐

안사라짐

위에서 selected란 클래스의 엘리먼트를 사라지게 할것이다.

$('p').remove('.selected');
//p엘리먼트에 접근후 
//selected란 클래스를 가진것을 제거한다.

결과는 안사라짐 이것만 나올것이다.

예제의 결과는 여기에서http://sianasiatiger.cafe24.com/study/D_empty_remove.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM wrap 메소드 대치하기

jQuery/DOM&jQuery 2009.11.24 18:52

text replaceAll, replaceWith 메소드

대치란 원래있던 값대신에 다른 값을 생성하여 넣어주는 것을 말한다. 이런것이가능한 메소드는 .text(), .replaceAll()그리고 .replaceWith()등이 있다.

text 메소드

.text()메소드는 텍스트를 대치해준다.안녕하세요?반갑습니다로 대치해보겠다.

안녕하세요?

이걸 대치하려면 다음과 같다.

$('p').text('반갑습니다');

결과는 안녕하세요? 대신에 반갑습니다가 나올것이다

replaceWith 메소드

이메소드는 .text()메소드 처럼 대치하느데 그 대상이 엘리먼트인다.예제를보자문자대신에 그림을 대치시켜보자.

네이버 간판으로 바뀜

$('p').replaceWith('');

네이버 간판으로 바뀜 대신에 아래그림이 나올것이다

replaceAll 메소드

이것도 영어 Not only A but also B = B as well as A와 마찬가지다 replaceWith와 기능은 같고 위치값만 다를뿐이다.

$('').replaceAll('p');

예제의 결과는 여기서 확인http://sianasiatiger.cafe24.com/study/D_replace.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM wrap 메소드 요소를 감싸기

jQuery/DOM&jQuery 2009.11.22 13:26

jQuery wrap,wrapAll, wrapInner 메소드

앞서 포스팅 한 것은 한엘리먼트를 두고 앞이나 뒤에 생성하는 것이였다. 이번엔 아래그림과같이 한 엘리먼트를 놔두고 감싸는 엘리먼트를 만들어보자.


wrap 메소드

앞서 여러 생성 메소드를 학습했다면 쉽다.다음과 같다.

$('p').warp('
'); //$('내부에 엘리먼트').warp('외부엘리먼트'); $('p').warp('
'); //위와같이 아이디 설정도 가능하다.

위와 같이 해준다면 표현은 다음과 같이 나올것이다

어쩌고 저쩌고...........

주의 할 점은 두가지이다.

  • 인라인 엘리먼트로 블록엘리먼트를 감싸던지(ex)p엘리먼트를 img로)같은 엘리먼트를같은 엘리먼트로 감싼다던지(ex)p를p로 감싸기)이런 실수를 범하지 않는다.
  • 감싸는 엘리먼트에 텍스트가 포함된경우$('p').warp('<div>텍스트</div>');감쌀 엘리먼트 p의 내용은 무시된다

wrapAll 메소드

.wrap()는 지정한 엘리먼트를 일일이 감싸는 반면 .wrapAll()메소드는 ALL, 즉 한번에 다 감싸버린다.차이를 비교한 예제를 보자

감싸줘요.

나도요.

나도요2.

나도요3.

자...위와 같은 html이 있다고 하자 이때 두메소드의 차이점을 보면

$('p').warp('
'); $('p').warpAll('
');

결과는 다음과 같이 나온다

감싸줘요.

나도요.

나도요2.

나도요3.

감싸줘요.

나도요.

나도요2.

나도요3.

한번더 요약하면 warp은 개별로 일일이 감싸주는거고 wrapAll은 전체를 감싼다.

wrapInner 메소드

이 메소드는 대상 엘리먼트를 감싸는게 아니라 그 속성값(텍스트등..)과 하위 엘리먼트를 감싼다. 그래서 Inner이란 말이 붙은것. 예제를 보자

어쩌고 저쩌고

어쩌고 저쩌고

html이 위와 같고...

$('p').warp('');
//p엘리먼트 안에서 b엘리먼트로 감싸준다.
$('alpha#div').warp('
'); //alpha란 아이디의 div엘리먼트안에서 div엘리먼트로 감싼다.

결과는 아래와 같다

어쩌고 저쩌고

어쩌고 저쩌고

주의할점

감싼다는것은 지정한 엘리먼트를 다른 엘리먼트안에 넣는다는 것이다.여기서 인라인과 블록 엘리먼트를 유의할 필요있다. 블록을 인라인엘이먼트로 감싼다면 잘못된것이다.또 같은 엘리먼트로 감싸도 잘못된것이다(물론 div말고..)

마지막으로 적용된예제를 보려면 여기서보자http://sianasiatiger.cafe24.com/study/D_wrap.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM after, befoer 메소드 요소뒤, 앞에 생성하기

jQuery/DOM&jQuery 2009.11.12 15:12

jQuery after, befoer 메소드

.after()은 정해진 엘리먼트 뒤에 생성되고 before()은 앞에 생성된다.예를보자

먼저 html은 다음과 같다.

여기앞에 그리고 뒤에 어쩌고 저저고 생성됨

.after()

  $('p').after('

after로 뒤에 생성

');

결과는 다음과 같다.

여기앞에 그리고 뒤에 어쩌고 저저고 생성됨

after로 뒤에 생성 된 것

.before()

  $('p').before('

bfore로 앞에 생성

');

결과는 다음과 같다.

before로 앞에 생성 된 것

여기앞에 그리고 뒤에 어쩌고 저저고 생성됨

insertAfter(), insertBefore()

이 두메소드 역시 Not only A but also B = B as well as A 와 같다고 보면된다.

A.after(B) = B.insertAfter(A),그리고 A.before(B) = B.insertBefore(A)

$('p').before('

bfore로 앞에 생성

'); $('

insertBfore로 앞에 생성

').insertBefore('p'); $('p').after('

after로 뒤에 생성

'); $('

insertAfter로 뒤에 생성

').insertAfter('p');

적용된 예제는 여기서 보자http://sianasiatiger.cafe24.com/study/D_after_before.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM트리 prepend, prependTo 메소드

jQuery/DOM&jQuery 2009.11.10 15:10

jQuery prepend() 메소드

append()메소드와 사용법은 같다. 그럼 차이점은 무언인가? pre-앞이란 뜻이있듯이 preapend는 앞에 생성된다.앞서 포스팅 append() 메소드를 보면 뒤에 생성된것을 볼 수 있다.preapend는 앞에 생성된다. 사용방법은 똑같다.

$(document).ready(function() {
  $('p').preppend('노말');
  $('p').prepend('굵게');
  $('가늘게').prependTo('p');
  });

결과는 아래와 같다

가늘게굵게노말본문

적용된 페이지는 여기로http://sianasiatiger.cafe24.com/study/D_append.html

저작자 표시
신고

설정

트랙백

댓글

jQuery DOM트리 append, appendTo 메소드

jQuery/DOM&jQuery 2009.11.10 14:55

jQuery append() 메소드

먼저 DOM이뭔지 다시 잠깐보자

"객체 지향 모델로써 구조화된 문서를 표현하는 형식이다. DOM은 플랫폼/언어 중립적으로 구조화된 문서를 표현하는 W3C의 공식 표준이다.DOM은 HTML 문서의 요소(엘레멘트; element)를 제어하기 위해 웹 브라우저에서 처음 지원됐다. DOM은 동적으로 문서의 내용, 구조, 스타일에 접근하고 변경하는 수단이었다. 브라우저 사이에 DOM 구현이 호환되지 않음에 따라, W3C에서 DOM 표준 규격을 작성하게 되었다."

jQuery 또한 이런 접근을 통해 모델을 구현한다.엘리먼트안에 새 엘리먼트를 만들거나.엘리먼트를 감싸거나, 엘리먼트 앞뒤에 추가하는 메소드를 지원한다. 그중 append()메소드가 엘리먼트안에 자식엘리먼트를 추가하는 방법이다.

append() 메소드

.append() 메소드는 선택한 엘리먼트안에 자식 엘리먼트,텍스트를 추가한다.

사용방법은 $('선택').append('내용');

예를보자

본문

$(document).ready(function() {
  $('p').append('노말');
  $('p').append('굵게');
  $('가늘게').appendTo('p');
  });

굵게 하도록하고 하위엘리먼트를 넣어보자<strong>굵게</strong>

$(document).ready(function() {
  $('p').append('노말');
  $('p').append('굵게');
  });

appendTo메소드를 보자 이것은 앞뒤가바뀌었다고 보면된다.

appendTo() 메소드

영어에서 as well as와 not~ but~ 를보자.Not only A but also B = B as well as A .대상 A,B가 바귀었다..appendTo()메소드 역시마찬가지다.$('A').append('B') = $('B'),appendTo('A')와 같다 다음예제를 보자

$(document).ready(function() {
  $('p').append('노말');
  $('p').append('굵게');
  $('가늘게').appendTo('p');
  });

최종결과는 다음과 같이 나올것이다.

본문노말굵게가늘게

적용된 페이지는 여기로http://sianasiatiger.cafe24.com/study/D_append.html

웹표준관련 주의사항

DOM트리를 짤는 메소드 사용시 appendsk기타등 변수값에 우리는 태그엘리먼트를 입력하게된다.예제에서 $('<i>가늘게</i>').appendTo('p');처럼 </i>를 넣는경우. 이런경우 자바스크립트 삽입시 html페이지에 그대로 넣을경우 코딩유효성 검사시 경고가뜬다. 따라서 이같이 태그 엘리먼트를 사용할시에는 별도로 파일이름을 정해주고 링크시키는방법이옳다.

또하나더 유의사항을 인코딩 방법이다. 인코딩방법에 따라 글자가 개지니 js파일이 무슨 종류의 인코딩인지 알아야한다. html과 일치하지않는경우 깨진다.

저작자 표시
신고

설정

트랙백

댓글


티스토리 툴바