ajax(Asynchronous JAvascript XML)

  • 비동기적으로 도메인 내의 데이터(XML 형식)를 가져오는 기술
  • 이 기술을 대부분 현재 화면 내부에서 일부분을 주기적으로 교체하기 위해서 사용했기 때문에 하나의 웹 페이지에서 전체 갱신없이 일부분의 데이터를 갱신하는 기술로 여겨집니다.

1.ajax 요청 방법

1) XMLHttpRequest 객체 생성

2) 요청 후 결과가 오면 호출되는 리스너를 등록(콜백함수를 등록)

  • 데이터(csv, xml, json)를 정상적으로 받아오면 수행할 내용을 작성

3) 서버로 보낼 데이터(파라미터)를 생성

4) 요청

2.ajax 요청 객체 생성

  • IE: ActiveXObject("Microsoft.XMLHTTP") 로 생성
  • 그 이외 브라우저: new XMLHttpRequest()로 생성

3.XMLHttpRequest 객체의 속성과 메소드

  • readyState: 한자리 정수로 객체의 상태를 나타내는 속성

    • 1이면 객체 생성 직후이고 2이면 요청을 한 상태이고 3이면 서버에서 응답이 오고 있는 상태이고 4이면 응답 완료
  • status: 응답의 상태를 나타내는 코드 - 웹 과 관련된 개발자가 될 때는 외워야 합니다. 100번대: 처리 중 200번대: 정상 응답 300번대: 리다이렉트 중 - 결과 URL로 이동 중 400번대: 클라이언트 오류 500번대: 서버 오류

  • responseText: XML 형식을 제외한 데이터

  • responseXML: XML 데이터
  • onreadstateChange: readyState가 변경될 때 호출될 콜백 메소드 지정

  • open(요청방식, 요청주소, 비동기여부): ajax 요청 옵션 설정

  • send(파라미터): 실제 전송

4.ajax에서 주의 사항

  • ajax는 도메인(현재 프로젝트) 내의 데이터만 가져올 수 있음
  • 외부 데이터를 가져와서 ajax로 사용하고자 하는 경우는 proxy를 구현해야 합니다.
  • proxy는 서버용 언어(Java 의 HttpURLConnection 클래스)로 데이터를 가져와서 넘겨주는 형태를 구현하는 것

5.텍스트 파일에서 데이터를 읽어와서 출력하기

1) 프로젝트의 WebContent 디렉토리에 텍스트 파일 1개 생성

  • data.txt

Database,Java,Web FrontEnd,Java Web Server Programming

2) ajax 요청 파일을 생성

  • ajax.html d

HTML, CSS, JavaScript

HTML: 웹 문서의 구조를 만들기 위해서 사용, 정적(만들면 변경이 안됨)
CSS: HTML 문서의 스타일을 변경하기 위해서 사용, 정적(만들면 변경이 안됨)
JavaScript: HTML 문서의 구조를 동적으로 변경하기 위해서 사용

  • HTML 과 JavaScript는 한 줄 씩 읽으면서 수행을 하고 CSS는 문서를 전부 읽고 화면에 출력되기 전에 적용을 합니다.
  • 각각의 역할이 다르기 때문에 별도의 파일에 만들어서 읽어내는 구조를 취하는 것이 좋습니다.
  • 최근의 Application 개발 기법에서는 대부분 화면구조를 나타내는 디자인 파일과 이 구조를 가지고 동적인 작업을 하는 소스코드를 분리해서 작업을 합니다.
  • Android 나 iOS(Mac OS 포함) 그리고 MS-Windows Programming이 이러한 방식을 취합니다.
  • 이러한 방식이 만들 때는 복잡하지만 코드의 분리로 인해서 가독성이 높아져서 유지보수에 유리합니다.

ajax : 자바스크립트를 이용해서 도메인 내의 데이터를 비동기적으로 받아오는 기술

어제 프로젝트: https://github.com/itggangpae/web0210.git

<script>
        //ajax를 이용해서 data.txt 파일의 내용을 읽어서 disp 영역에 출력
        var disp = document.getElementById("disp");
        var request;        //ajax 객체 생성
        if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            request = new XMLHttpRequest();
        }

        request.open('GET', 'data.txt');     //요청 옵션을 생성 - data.txt를 GET 방식으로 요청

        setInterval(function(){         // 30초마다 계속 수행되는 타이머
            request.send('');    //요청을 전송 (계속 반복적으로 )
        }, 30000)

        //비동기 실행 - 콜백이 존재
        //비동기는 언제 종료될 지 몰기 때문에 종료된 후에 어떤 동작을 수행하고자 하면 콜백 메소드에 작성
        //callback : 어떤 이벤트가 발생하면 호출되는 메소드
        //파일을 읽는 부분도 마찬가지 - 파일을 읽어주세요 요청 - 파일을 전부 읽으면(load) 동작을 수행

        //콜백 메소드를 등록
        request.onreadystatechange = function() {
            //응답을 정상적으로 받 경우
            if (request.reayState = 4 && request.status >= 200 && request.status < 300) {
                //읽어온 데이터를 disp에 출력
                disp.innerHTML = request.responseText;
            }
        }
    </script>

json 파싱

  • 자바스크립트에서는 JSON 문자열은 JSON.parse()에 대입하면 파싱을 수행해서 자바스크립트 객체로 리턴을 해줍니다.
data.json 파일 생성 
[{"name" :"javascript", "rank" : 1}, {"name":"java", "rank" :2}]

<script>
    //1.ajax 요청 객체 생성 - 반드시 1번 
    //2.ajax 요청 옵션을 생성 - 1번 이후에 3번보다 먼저 나오면 됨 
    //3.ajax 요청
    //4.상태변화가 생겼을 때 호출 될 콜백 메소드를 등록 - 1번 이후에 아무곳에서 작성해도 됨 
    //콜백(이벤트처리) 메소드는 순서와 상관없이 이벤트가 발생했을 때 호출되는 메소드 (비동기, 순서가 없다)
</script>
    <script>
        //1.ajax 요청 객체 생성 - 반드시 1번 
        var request;
        //if를 사용하는 이유  : IE와 다른브라우저가 ajax 요청 객체 생성 방법이 다름  
        if (window.ActiveXObject) {
            request = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
            request = new XMLHttpRequest();
        }

        //2.ajax 요청 옵션을 생성 - 1번 이후에 3번보다 먼저 나오면 됨 
        request.open('GET', 'data.json');

        //3.ajax 요청
        request.send('');

        //4.상태변화가 생겼을 때 호출 될 콜백 메소드를 등록 - 1번 이후에 아무곳에서 작성해도 됨 
        //콜백(이벤트처리) 메소드는 순서와 상관없이 이벤트가 발생했을 때 호출되는 메소드 
        request.onreadystatechange = function() {
            //정상적으로 데이터를 받아오는 경우 
            if (request.readyState == 4 && request.status >= 200 && request.status < 300) {
                var res = request.responseText;     //받아온 문자열 - json 문자열
                alert(res);
            }
        }
    </script>

        request.onreadystatechange = function() {
            //정상적으로 데이터를 받아오는 경우 
            if (request.readyState == 4 && request.status >= 200 && request.status < 300) {
                var res = request.responseText;        //받아온 문자열 - json 문자열
                var result = JSON.parse(res);        //json 파싱 - 객체의 배열이 만들어진다. 
                var disp = document.getElementById("disp");   //배열의 경우 출력할 영역 찾기
                var html = ''
                for(var idx in result){            // 배열 순회 
                    html += "<p>" + result[idx].name + ':' + result[idx].rank + '</p>'
                }
                disp.innerHTML = html;
            }
        }

results matching ""

    No results matching ""