hyeonga_code

Ajax_서버의 응답 처리_실습 포함 본문

Ajax

Ajax_서버의 응답 처리_실습 포함

hyeonga 2023. 10. 14. 06:59
반응형

  

 - 서버의 응답 처리
        - XMLHttpRequest 객체의 프로퍼티
            - onreadystatechange 프로퍼티           
                - 상태의 변경이 발생한 경우 해당하는 이벤트를 처리하기 위한 이벤트 핸들러를 기술합니다.
               httpRequest.onreadystatechange = callBackFunction;

            - readyState 프로퍼티      
                - 요청 객체의 상태를 리턴하는 것
                - 프로퍼티
                    - UNINITIALIZED
                        - 객체만 생성되고 아직 초기화되지 않은 상태입니다.
                        - open 메소드가 호출되지 않습니다.
                    - LOADING
                        - open 메소드가 호출되고 아직 send 메소드가 호출되지 않은 상태입니다.
                    - LOADED
                        - send 메소드가 호출되었지만 status와 헤더는 도착하지 않은 상태입니다.
                    - INTERACTIVE
                        - 데이터의 일부를 받은 상태입니다.
                    - COMPLETED
                        - 데이터를 전부 받은 상태입니다.
                        - 완전한 데이터 이용이 가능합니다.
              function callBackFunction(){
                  if (httpRequest.readyState == 4){    
                       // 서버에서 완전하게 응답이 도착한 경우
                  }

             }
                        - 2,3 : 웹 브라우저마다 다르게 처리됩니다.
                            - 오페라에서 요청한 페이지가 존재하지 않는 경우 3으로 변경되지 않습니다.
                            - 파이어폭스, IE의 경우 요청한 페이지가 존재하지 않더라도 3으로 변경될 수 있습니다.
                            - 1,4를 주로 사용합니다.


            - status 프로퍼티      
                - 서버로부터 응답을 받는 Http 상태 코드
                - 주요 상태 코드
                    - 200 : OK : 요청 성공
                    - 403 : Forbbiden : 접근 거부
                    - 404 : Not Found : 페이지 없음
                    - 500 : Internal Server Error : 서버 오류 발생
                    function callBackFunction(){
                        if(httpReque4st.readyState == 4) {
                            if(httpRequest.statud == 200){
                                // 정상적으로 수행
                           } else {
                                alert("Error : " + httpRequest.status);
                           }
                       }
                    }

            - responseText 프로퍼티      
                - 문자열로 이루어진 서버의 응답
                - 웹 서버는 단순 텍스트 또는 XML 두 가지 형식으로 데이터를 전송할 수 있습니다.
                    function callBackFunction(){
                        if(httpReque4st.readyState == 4) {
                            if(httpRequest.statud == 200){
                               var txt = httpRequest.responseText;

                                // txt 변수를 사용하여 알맞은 작업을 수행합니다.
                           }
                       }
                    }


            - responseMXL 프로퍼티      
                - XML로 이루어진 서버의 응답

            - responseBody 프로퍼티      
                - 이진 코드 문자열로 서버의 응답

---- 실습
- dynamic web project : Ajax
- webapp > ch01 폴더 생성
- ch01 > simpleAjaxApp.html 작성
=====

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
62
63
64
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>01_SimpleAjaxApp</title>
 
<script type="text/javascript">
    // XMLHttpRequest 객체를 저장하기 위한 변수를 선언합니다.
    var httpRequest = null;
    
    // XMLHttpRequest 객체를 생성하는 함수입니다.
    function getXMLHttpRequest() {
        if (window.ActiveXObject) {
            try {
                return new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    return new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e1) {
                    return null;
                }
            }
        } else if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        } else {
            return null;
        }
    }
    
    // 서버에서 데이터를 가져오는 함수입니다.
    function load(url) {
        // 객체를 얻어옴
        httpRequest = getXMLHttpRequest();
        
        httpRequest.onreadystatechange = viewMessage;
        
        // get 방식으로 url을 오픈합니다.
        httpRequest.open("GET", url, true);
        
        httpRequest.send(null);
    }
    
    // XMLHttpRequest의 상태 변화 이벤트를 처리하는 함수입니다.
    function viewMessage() {
        // 서버의 응답이 확인되는 경우
        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
                alert(httpRequest.responseText);
            } else {
                alert("실패: " + httpRequest.status);
            }
        }
    }
</script>
 
</head>
<body>
    <!-- simple2.txt 파일의 글씨가 깨져서 출력됩니다. -->
    <input type="button" value="simple.txt" onclick="load('simple.txt')"/>
    <input type="button" value="simple2.txt" onclick="load('simple2.txt')"/>
    <input type="button" value="simple.jsp" onclick="load('simple.jsp')"/>
    <input type="button" value="simple2.jsp" onclick="load('simple2.jsp')"/>
</body>
</html>


- ch01 폴더 안에 4개의 파일을 작성합니다.
    - simple.txt  (UTF-8)
    - simple2.txt (EUC-KR)
    - simple.jsp   (UTF-8)   
    - simple2.jsp  (EUC-KR)
        - 내용은 상관 없습니다.
        - 인코딩 방식을 변경하여 저장합니다.


    - 실행합니다.
        - simple2.txt의 파일이 깨져서 출력됩니다.
- JSP의 경우 인코딩 방식을 따로 지정해도 깨지지 않고 출력됩니다.
- XMLHttpRequest의 기본 캐릭터 셋인 UTF-8로 인코딩됩니다.






반응형