본문으로 바로가기

AJAX 예제1)

category WEB/JavaScript 2020. 7. 17. 19:26
  • XMLHttpRequest 객체를 이용한 통신을 하기위해 따로 모듈화하여 코드의 중복을 줄였습니다.
  • xhr객체를 생성하고 요청을 처리하는 모듈화 된 xhr.js 파일
    var xhr=null;
    
    // XMLHttpRequest 객체 생성.
    function createXHR(){
       if(window.XMLHttpRequest){
          return new XMLHttpRequest;         
       }else{
          return new ActiveXObject("Microsoft.XMLHTTP");
       }
    }
    
    // 요청할 메서드와, URL, 요청파라미터와 결과를 화면에 뿌려줄 callback함수를
    // 파라미터로 받는 함수를 작성해줬습니다.
    function sendRequest(method, url, params, callback){
    
        var httpMethod = method.toUpperCase();
        var httpUrl = url;
        var httpParams = (params==null || params=="") ? null:params;
    
        if (httpMethod == "GET" && httpParams != null){ //GET 방식일때
            url += "?" + httpParams;
        }
    
        xhr = createXHR();    //XMLHttpRequest 객체 생성.
        xhr.open(httpMethod, httpUrl, true);
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // GET일때는 실행 안됨, POST만 실행
        xhr.send(httpMethod=="POST" ? httpParams : null); //GET이면 null, POST면 파라미터 갖음
        xhr.onreadystatechange = callback();
    }

    원하는 요청을 받아 처리해주고 콜백함수를 호출하는 함수를 구현하였습니다.

    이 sendRequest() 메서드로 다양한 요청에 응답할 수 있습니다.

  • 모듈화 된 xhr.js를 이용하기
  • 부서명에 따라서 사원의 테이블을 화면에 출력해 주는 AJAX를 구현해봅니다.
    <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <c:set var="root" value="${pageContext.request.contextPath}"/>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="${root}/xhr/xhr.js"></script>
    <script type="text/javascript" src="${root}/javascript/sawon/sawon.js"></script>
    </head>
    <body>
        <form id="sawonForm">
            <select name="departmentName" onchange="toServer('${root}')">
                <option>부서 선택하세요.</option>
                <option value="Marketing">Marketing</option>
                <option value="IT">IT</option>
                <option value="Sales">Sales</option>
            </select>
        </form>
        <div id="resultDisp"></div>
    </body>
    </html>
    부서명을 선택하여 요청할 데이터를 보낼 페이지입니다. 여기서 xhr.js 과 sawon.js를 명시합니다.
  • 받아온 데이터를 처리해 줄 자바스크립트 sawon.js
    function toServer(root){
        var departmentName = document.getElementById("sawonForm").departmentName.value;
        if(departmentName != "부서 선택하세요."){
            url = root + "/sawon/listOk.do";
            params = "departmentName=" + departmentName;
            sendRequest("POST", url, params, resultProcess)
        }
    }
    
    function resultProcess(){
        if (xhr.readyState==4 && xhr.status==200){
            arr.push(xhr.responseText);
            var resultDisp = document.getElementById("resultDisp");
            resultDisp.innerHTML = xhr.responseText;
        }
    }
    요청할 URL과 파라미터를 가지고 sendRequest() 메서드에게 전달해줍니다. 그러면 xhr.js에 있는 sendRequest() 메서드가 XMLHttpRequest 객체를 이용하여 비동기식으로 통신할겁니다. 서버에서 받아온 데이터는 resultProcess() 메서드에 의해 처리 됩니다.
  • 서버에서 응답된 데이터
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <table board="1">
            <tr>
                <td align="center" bgcolor="#DEDEDE" width="100">사번</td>
                <td align="center" bgcolor="#DEDEDE" width="100">이름</td>
                <td align="center" bgcolor="#DEDEDE" width="100">입사년도</td>
                <td align="center" bgcolor="#DEDEDE" width="100">직군</td>
                <td align="center" bgcolor="#DEDEDE" width="100">부서번호</td>
                <td align="center" bgcolor="#DEDEDE" width="100">부서명</td>
            </tr>
        <tr>
          <td width="100" align="center">201</td>
          <td width="100" align="center">Michael</td>
    
          <td width="100" align="center">
            2004-02-17
          </td>
    
          <td width="100" align="center">MK_MAN</td>
          <td width="100" align="center">20</td>
          <td width="100" align="center">Marketing</td>
        </tr>        
    
        <tr>
          <td width="100" align="center">202</td>
          <td width="100" align="center">Pat</td>
    
          <td width="100" align="center">
            2005-08-17
          </td>
    
          <td width="100" align="center">MK_REP</td>
          <td width="100" align="center">20</td>
          <td width="100" align="center">Marketing</td>
        </tr>        
    
        </table>
    </body>
    </html>
    서버에서 응답된 데이터입니다. 이번 예제에선 JSP 파일이 응답됬지만 AJAX의 응답데이터는 거의 JSON이거나 XML 형태로 응답되는게 대부분입니다.
  • 결과 화면

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

XMLHttpRequest 객체를 이용한 AJAX 통신  (0) 2020.07.15