<한줄요약>

AJAX : 페이지의 비동기적 처리를 가능하게 해준다 ( 특정 부분만 로드, 갱신, 변경 )

 

1. AJAX란?

 

-  Asynchronous Javascript and XML

-  비동기적으로 데이터를 전달, 결과를 처리하는 방법

-  화면 갱신이 필요하지 않다

 

-  일반 페이지 이동 : data를 전달하면 서버에서 대상 page 전달, client에선 page 전환 발생

  -  page는 서버에서 된다된다

-  AJAX : data를 전달하면 서버에서 XML/JSON등 데이터 전달, client는 해당 data로 동적 화면 변경

  -  page는 client에서 구성된다 (서버가 보내준 data를 활용하여)

 

 

2. JavaScript에서 AJAX 사용

 

-  서버로 데이터를 전송할 객체 필요

  -  XMLHttpRequest 사용

-  XMLHttpRequest의 onreadystatechange 함수로 AJAX요청에 대한 callback 함수를 지정한다

-  open / send 함수로 서버로 데이터 전달 시작

//https://developer.mozilla.org/ko/docs/Web/Guide/AJAX/Getting_Started

function makeRequest() {
    httpRequest = new XMLHttpRequest();
	//예외처리
    if(!httpRequest) {
      alert('XMLHTTP 인스턴스를 만들 수가 없어요 ㅠㅠ');
      return false;
    }
    //callback함수 지정
    httpRequest.onreadystatechange = alertContents;
    //server에 요청 전달
    httpRequest.open('GET', 'test.html');
    httpRequest.send();
  }
  //callback함수
  function alertContents() {
  	//요청이 정상 수행됬다면 alert
    if (httpRequest.readyState === XMLHttpRequest.DONE) {
      if (httpRequest.status === 200) {
        alert(httpRequest.responseText);
      } else {
        alert('request에 뭔가 문제가 있어요.');
      }
    }
  }

 

 

3. JQuery에서 AJAX 사용

 

-  $.ajax() 함수 사용

-  옵션만 지정하는 간단한 코드로 쉽게 사용 가능하다

-  url, 요청 type, 성공/실패 함수를 지정하면, 실행시 지정 url로, 지정된 type의 요청을 보내 성공/실패에 따라 처리한다

$.ajax({
	//서버 요청 경로
	url:"url",
	//요청 type (get/post 등)
	type:"GET",
	//post는 data를 본문에 포함한다 
	success:function(response){
		//성공했을 때 호출
	},
	error:fuction(xhr, status, errormsg){
		//에러발생 시 호출
	}
});

 

-  $.get() / $.post() 함수

-  위 $.ajax함수를 get방식 / post방식으로 type을 미리 지정해놓은 함수

-  내부 인자는 type 제외 동일

 

-  GET / POST방식이란?

  GET방식 POST방식
data의 위치 URL에 data를 포함시켜서 전송한다
data가 직접 노출된다
ex) http://mysite.com?data1=10&data2=20 ....
data를 Body에 포함시켜 전송한다
data가 직접 노출되진 않는다
길이 제한 URL의 길이에 제한이 있어, data에도 제한이 있다 길이 제한 없음
캐싱 캐싱 가능 캐싱 불가능

 

-  $(selector).load(url, data, function(~~){} ) 함수

-  selector를 통해 탐색한 DOM객체에, load함수가 가져온 html data를 넣는다

-  .load("test.html #id") 같은 식으로, 호출하려는 html에서 특정 id/class/tag를 추출할 수 있다.

 

 

4. 데이터 전송 형식

 

-  Server / Client가 주고받는 data의 형식이 일치해야 원활한 처리가 가능하다

 

-  1. CSV

-  Comma Separated Values. 직역하면 "콤마(,) 로 구분된 값"

-  말 그대로 데이터들을 ,으로 구분한다. (홍길동,19세,도적,..)

-  장점 : 데이터의 크기가 작다.

-  단점 : 데이터의 의미 파악이 힘들다. server-client간에 완벽히 데이터의 순서까지 일치해야한다

 

-  2. XML

-  eXtensible Markup Language

-  tag로 data의 의미를 표시한다, 사용자 정의 tag 사용가능

-  데이터의 순서가 달라져도 tag가 일치하면 지장 없다

<people>
	<person>
		<name>홍길동</name>
		<age>19></age>
		<job>도적</job>
	</person>
	<person>
		....
	</person>
</people>

 

-  3. JSON

-  JavaScript Object Notation

-  객체의 형식으로 data를 표현한다.

people[
	{
		"name" : "홍길동",
	    "age" : 19,
	    "job" : "도적"
	},
	{
		...
	},
]

 

 

5. Event 관리

 

-  ajax가 어느정도 진행중인지 확인할 수 있다

-  진행 단계에 따라 함수 호출

함수명 호출시점
ajaxStart ajax함수 실행 직후
ajaxSend 서버전송 직전
ajaxSuccess 서버요청 반환이 성공일 경우
ajaxError 서버요청 반환이 실패일 경우
ajaxComplete 서버요청 반환시
ajaxStop ajax함수 종료시

-  ex) ajax 실행시 loading창(기본 hide)을 보여주고, ajax완료시 숨길 수 있다

$(document)
.ajaxStart(function(){
	$("#loading").show();
})
.ajaxStop(function(){
	$("#loading").hide();
})

'WEB 공부' 카테고리의 다른 글

[WEB] Backend - EL, JSTL  (0) 2021.05.16
[WEB] Backend - Servlet, JSP  (0) 2021.05.16
[JAVA] JDBC  (0) 2021.05.16
[WEB] Frontend - Bootstrap  (0) 2021.05.15
[WEB] Frontend - JQuery  (0) 2021.05.09
[WEB] Frontend - JavaScript, WebBrowser  (0) 2021.05.08
[WEB] Frontend - HTML, CSS  (0) 2021.05.08

+ Recent posts