AJAX 정리

2016. 11. 23. 10:50Programming/JavaScript


AJAX(Asynchronous JavaScript and XML)란 '비동기식 웹 통신'을 말함

웹브라우저와 웹서버가 내부적으로 데이터 통신을 하기 때문에,

서비스 요청시 페이지 일부만 로딩 가능



<AJAX 처리 과정>


1) 이벤트 발생(ex. 버튼 클릭)



2) XMLHttpRequest가 생성됨


1
2
3
var xhttp; //HttpRequest 객체 담을 변수
    if(window.XMLHttpRequest){
        xhttp = new XMLHttpRequest();
cs


3) XMLHttpRequest가 웹서버에 요청 보냄


1
2
xhttp.open("GET","books.xml",true); //접속할 파일 설정
xhttp.send(); //접속, 성공시 onreadystatechange에 선언된 함수가 실행됨
cs


4) 서버가 요청 처리

*통신 성공시 익명 function이 실행됨


1
2
3
4
5
xhttp.onreadystatechange = function(){
     if(this.readyState == 4 && this.status == 200){
        //readyState가 4이면 통신 완료, status가 200이면 통신 성공임
        var xml = this.responseXML; //<=>responseText(response를 String으로 받음)
        test(xml);
cs


5) 서버가 처리된 내용을 웹페이지에 response



<예제 들어가기 전에... AJAX 구성 순서>


1) 출력할 HTML 부분에 ID 붙이기

<tbody class="list"></tbody>


2) ID를 검색해서 변수에 담기

 var tableList = document.querySelector("#memList .list");


3) htmlList에 내용을 담은(function 처리) 후 HTML화

tableList.innerHTML = htmlList; 


4) http(XMLHttpRequest 객체) 구현해 URL에 접속하도록

if(window.XMLHttpRequest){
        http=new XMLHttpRequest();

http.open("GET",url,true);
    http.send();


5) 접속 성공시 실행할 메소드 정리

http.onreadystatechange=function(){
        if(this.readyState==4 && this.status==200){ //접속 성공 여부 확인
            실행할 메소드 넣기


<AJAX 예제 1: ID 중복 검사>



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
32
33
34
35
36
37
38
39
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>아이디 중복체크(AJAX)</title>
</head>
<body>
<h1>AJAX로 checkId.do를 호출해서 db에서 id가 있는지 중복 체크하자.</h1>
<form name="checkIdForm"><!-- form name은 id와 같은 역할(HTML의 유일한 값) -->
    <input type="text" name="userId" value="ichi">
    <button type="button" onclick="checkId(this.form.userId.value)">중복검사</button>
</form>
<div id="checkId"></div>
<script>
    function checkId(userId){
        var http = new XMLHttpRequest();
        var url = "checkId.do?userId="+userId;
        http.onreadystatechange = function(){
            if(this.readyState==4 && this.status==200){
                var checkId = JSON.parse(this.responseText);
                var msg;
                if(checkId['checkId']){
                    msg = '사용중인 아이디입니다.';
                }else{
                    msg = '사용 가능한 아이디입니다.';
                }
                document.getElementById("checkId").innerHTML=msg;
            }
        }
        http.open("GET",url,true);
        http.send();
    }
</script>
</body>
</html>
cs


<AJAX 예제2: MemberList 출력>



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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>AJAX로 MEMBER List를 불러오자</h1>
<button onclick="loadDoc()">list load()</button>
    <table border="1" id="memList">
    <tbody class="title">
        <tr>
        <th>num</th><th>id</th><th>pwd</th><th>name</th>
        <th>email</th><th>phone</th><th>indate</th><th>admin</th>
        <th>삭제</th>
        </tr>
    </tbody>
    <tbody class="list"></tbody>
</table>
<script>
var loadDoc = function(){
    var http;
    if(window.XMLHttpRequest){
        http=new XMLHttpRequest();
    }else if(window.ActiveXObject){
        http=new ActiveXObject(); //ie6,ie5 or 이클립스 브라우저
    }
    var url = "memList.jdo";
    http.onreadystatechange=function(){
        //보통 this는 window지만 객체 함수 내부에서는 XMLhttpRequest 의미
        if(this.readyState==4 && this.status==200){
            var memList = JSON.parse(this.responseText);
            memListHtml(memList);
        }
    }
    http.open("GET",url,true);
    http.send();
}
var memListHtml = function(memList){
    var tableList = document.querySelector("#memList .list");
    var htmlList = "";
    var length = memList.length;
    for(var i=0;i<length;i++){
        htmlList+="<tr>";
        htmlList+="<td>"+memList[i]["num"]+"</td>";
        htmlList+="<td>"+memList[i]["id"]+"</td>";
        htmlList+="<td>"+memList[i]["name"]+"</td>";
        htmlList+="<td>"+memList[i]["pwd"]+"</td>";
        htmlList+="<td>"+memList[i]["email"]+"</td>";
        htmlList+="<td>"+memList[i]["phone"]+"</td>";
        htmlList+="<td>"+memList[i]["indate"]+"</td>";
        htmlList+="<td>"+memList[i]["admin"]+"</td>";
        htmlList+="<td><a>삭제</a></td>";
        htmlList+="</tr>";
    }
    tableList.innerHTML = htmlList;
}
</script>
</body>
</html>
cs


'Programming > JavaScript' 카테고리의 다른 글

Object Model(자바스크립트 개요), BOM, DOM  (0) 2016.11.28
상속(prototype)  (0) 2016.11.27
JSON 정리  (0) 2016.11.23
함수(Function)  (0) 2016.11.23
문자열, 배열 처리  (0) 2016.11.22