🔯 Ajax


  • Ajax는 'Asynchronous JavaScript And XML'의 약자이다.
    : 특정언어나 플랫폼 혹은 프레임워크나 라이브러리를 뜻하는 것이 아니라 Javascript로 원격지로부터 데이터를 읽어오는데 필요한 처리 기술들의 집합체라고 할 수 있다.
  • 비동기 통신 처리를 의미라며, Javascript를 이용해 서버와 데이터를 주고받는 방식이다.

 

  XMLHttpRequest 객체는 서버측 Javascript와 통신하기 위한 Ajax핵심 기술이며, Ajax의 가장 강력한 특징인 비동기성을 가능케 한다. 비동기 처리로인해 페이지는 사용자 이벤트를 처리하면서 전체 페이지가 아닌 일부분만을 업데이트 할 수 있게 된다.
  ➞  페이지 일부분을 업데이트 하기위한 정보를 서버에 요청 할 수 있다.
  ➞  서버로부터 받은 데이터로 작업을 한다.

 

  • XMLHttpRequest(서버와 통신 담당) 객체를 사용하여 서버로부터 데이터를 가져오고, 그 내용을 페이지에 반영해 주기 위해 HTML 태그 요소를 제어하는 DOM 객체에 대한 처리 및 CSS처리의 병행을 보여준다
  • 그래서 Ajax가 적용된 페이지는 전체 HTML페이지가 아닌 XML이나 JSON형식으로 구성된 새로운 내용만을 XMLHttpRequest(서버와 통신 담당) 객체를 통해 받아오기 때문에, 페이지 이동 없이 새로운 내용을 사용자에게 제공할 수 있다.

 

 

  • 2번째 사진: 웹 브라우저에서 페이지 일부의 정보(b)가 변경 ➞ 서버에 페이지 업데이트를 요청 ➞ 서버는 요청받은 정보를 처리하고 모든 페이지 영역을 HTML로 재구성(a+b+c)하고 완성된 페이지 형태로 브라우저에 되돌려준다.
    = 이 방식은 페이지의 일부만 변경되더라도 서버가 나머지 불필요한 부분까지 전부 업데이트 처리하기 때문에 페이지 갱신의 퍼포먼스가 떨어질 수 밖에 없다.
  • 또 한가지 문제점은 서버에서 응답이 돌아올 때까지 웹 브라우저는 아무런 작업도 하지 못하고 기다려야 한다는 점이다. 이러한 문제점을 개선하기 위해 고안된 방식이 Ajax이다.

 

 

🖤 Ajax로 하는 일


  • text, HTML, XML, JSON 형식으로 작성된 문서 데이터를 HTTP프로토콜을 통해 서버에 요청할 수 있다.
  • 구글 맵이나 유튜브 서비스와 같이 웹 페이지의 특정 영역에만 필요한 내용을 갱신할 수 있다.
  • 일반적으로 프로그램의 프로세스는 동기화 처리를 한다. 예를 들면, a라는 작업이 끝난후에 b라는 작업을 진행하는 것이다. 사람이 한명이라면 그렇게밖에 일을 하지 못하지만, 사람을 추가로 고용하면 a작업과 b작업을 동시에 진행할 수 있다. 이러한 형태로 작업하는 것을 "비동기적인 처리"라고 하며, Javascript에서는 콜백 함수 형태로 처리한다.

 

 

🖤 jQuery를 이용한 Ajax 응용


함수 / 파라미터 설 명
$.ajax() 함수 웹 서버와의 통신 결과에 따라 success()와 error()함수를 선택적으로 호출한다.
xhr Javascript에서 ajax처리를 위해 사용되는 XMLHttpRequest
textStatus "error" 고정값을 갖는 문자열이 전달된다.
errorThrown 에러의 원인을 의미하는 문자열이 전달된다. 404에러일 경우 "Not Found"라고 전달되고, 500에러일 경우 "Server Error"라는 문자열이 전달된다.
$.ajax({
	url: "접속할 페이지 주소",
	type: "get/post",
	data:"파라미터 문자열",		//(예시: key=language&value=java)
	dataType: "text/xml/json",
	timeout: 밀리세컨드단위 제한시간,
	cache: 이전 요청에 대한 캐쉬 저장 여부(true: 사용함/false:안함),
	
	/*👌 파일 읽기에 성공한 경우 */
	success: function (data) {	
		// 통신이 성공했을 때 실행되는 함수
	},
	/*👎 파일 읽기에 실패한 경우(주소 오타,웹서버 중지 등) */
	error: function (xhr, textStatus, errorThrown) {
		// 통신이 실패했을 때 실행되는 함수
	}
});
  • $.ajax() 함수는 웹서버와의 통신 결과에 따라 success()와 error() 함수를 선택적으로 호출한다.
  • 파일 읽기에 성공한 경우 success : success()함수의 파라미터로 서버에서 읽은 결과가 전달되며, dataType에 text,xml,json중 어떤 값을 지정하였는지에 따라 처리 방법이 변하게 된다.
  • 파일 읽기에 실패한 경우 error : 세 개의 파라미터가 전달된다.- xhr : Javascript에서 Ajax처리를 위해 사용되는 XMLHttpRequest객체의 원본이다. 이 객체가 포함하는 status속성에 HTTP ERROR CODE (404 : Page Not Found, 500 : Server Error)값이 포함된다.- textStatus : "error"라는 고정값을 갖는 문자열이 전달된다. 
    - errorThrown : 에러의 원인을 의미하는 문자열이 전달된다. 404에러일 경우 "Not Found"라고 전달, 500에러일 경우 "Server Error"값이 포함된다

 

▶  $.ajax() 함수를 사용한 txt 읽기

더보기
$(function () {				
    // 버튼의 클릭 이벤트
    $("#mybtn").click(function () {
		
        $.ajax({
            url: "../ajax/txt/01.txt",	// 접속할 페이지 주소
            type: "get",			// get/post
            dataType: "text",		// text/xml/json
            timeout: 30000,		// 밀리세컨드단위 제한시간
            cache: false,		// 이전 요청에 대한 캐쉬 저장 여부(true: 사용함/false:안함)
                   
            /*👌 파일 읽기에 성공한 경우 */
            success: function (data) {
                // 통신이 성공했을 때 실행되는 함수
                //dataType값이 text일 경우에는 단순히 내용에 대한 문자열이라 직접 HTML요소에 출력할 수 있다
                $("#result").html(data);
            },
            /*👎 파일 읽기에 실패한 경우(주소 오타,웹서버 중지 등) */
            error: function (xhr, textStatus, errorThrown) {
                // 통신이 실패했을 때 실행되는 함수
                $("#result").html(textStatus + " (HTTP-" + xhr.status + "/" + errorThrown + ")");
            }
        });
    });
});	// $ 종료구문
<h1>$.ajax() 함수를 사용한 텍스트 읽기</h1>
<div class="exec">
	<input type="button" value="txt파일 가져오기" id="mybtn"/>
</div>
<div class="console" id="result"></div>

▶  $.ajax()함수를 사용한 HTML소스 읽기

더보기
$(function () {				
    $("#mybtn").click(function () {
		
        $.ajax({
            url: "../ajax/txt/02.txt",	// 접속할 페이지 주소
            type: "get",			// get/post
            dataType: "text",		// text/xml/json
            timeout: 30000,		// 밀리세컨드단위 제한시간
            cache: false,		// 이전 요청에 대한 캐쉬 저장 여부(true: 사용함/false:안함)
                   
            success: function (data) {
                //dataType값이 text일 경우에는 단순히 내용에 대한 문자열이라 직접 HTML요소에 출력할 수 있다
                $("#result").append(data);
            },
            error: function (xhr, textStatus, errorThrown) {
                $("#result").html(textStatus + " (HTTP-" + xhr.status + "/" + errorThrown + ")");
            }
        });
    });
});
<h1>$.ajax()함수를 사용한 HTML소스 읽기</h1>
<div class="exec">
	<input type="button" value="txt파일 가져오기" id="mybtn"/>
</div>
<div class="console" id="result"></div>

▶  $.ajax()함수를 사용한 XML 읽기

더보기
$(function () {				
    $("#mybtn").click(function () {
		
        $.ajax({
            url: "../ajax/xml/03.xml",
            type: "get",
           dataType: "xml",
            timeout: 30000,
            cache: false,
            
            success: function (data) {
                // 읽어온 XML파일안에 포함된 데이터를 추출
                let title = $(data).find("title").text();
                let time = $(data).find("time").text();
                let teacher = $(data).find("teacher").text();
                
                // 추출된 데이터를 화면에 출력하기 위한 HTML요소를 동적으로 생성
                let div = $("<div>");
                let p1 = $("<p>").html(title);
                let p2 = $("<p>").html(time);
                let p3 = $("<p>").html(teacher);
                
                // 메서드 체인을 사용한 동적 요소 결합. <div><p></p><p></p><p></p></div>
                div.append(p1).append(p2).append(p3);
                
                // 화면에 표시
                $("#result").html(div);              
            },

            error: function (xhr, textStatus, errorThrown) {
                $("#result").html(textStatus + " (HTTP-" + xhr.status + "/" + errorThrown + ")");
            }
        });
    });
});
<h1>$.ajax()함수를 사용한 XML 읽기</h1>
<div class="exec">
	<input type="button" value="xml파일 가져오기" id="mybtn"/>
</div>
<div class="console" id="result"></div>

추출되는 03.xml

<?xml version="1.0" encoding="UTF-8"?>
<school>
	<subject>
		<title>나의 하루 일과(교육원)</title>
		<time>매주 월 금 오전</time>
		<teacher>이솝</teacher>
	</subject>
</school>

 

'Language > Javascript' 카테고리의 다른 글

jQuery  (0) 2022.06.10
JSON(Javascript Object Notation)  (0) 2022.05.22
정규 표현식(Regular Expression)  (0) 2022.05.22
2. DOM 선택자  (0) 2022.05.20
1. DOM (Document Object Model)  (0) 2022.05.17