아무것도 모르고 시작하는 코딩

Ajax란? | 아무것도 모르고 시작하는 코딩

ZNOS 2020. 8. 16. 16:02
반응형

"Ajax는 '비동기 서버 통신방식' 입니다. 여기서, '서버 통신'은 웹 기초 동작원리에서 배운 요청-응답 을 이야기합니다. 그리고 '비동기' 덕분에 Ajax를 사용하면, 웹 페이지 전체를 새로고침 하지 않고서도 작업을 수행할 수 있게 됩니다. 즉, 동작(event)이 일어났을 때, 전체 페이지가 아닌 일부분만을 업데이트 할 수 있게 되는 것이지요."

 

동기, 비동기

 

쉽게 얘기해서, 왼쪽처럼 모든 일이 순차적으로 진행되는 것이 아니라, 오른쪽처럼 동시에 진행이 되는것이 비동기이며 이를 통해 페이지의 일부만 업데이트가 가능해서 작동시간을 줄여줄 수 있다는 얘기이다

 

이제 Ajax를 이용한 연습을 해보자

사용할 API : http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99

<!Doctype html>
<html lang="ko">

<head>
    <meta charset="UTF-8">
    <title>jQuery+Ajax의 조합을 연습하자!</title>

    <!-- jQuery를 import 합니다 -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <style type="text/css">
        div.question-box {
            margin: 10px 0 20px 0;
        }
    </style>

    <script>
        function showMiseInfo() {
            // 여기에 코드를 입력하세요
        }
    </script>

</head>

<body>
<h1>jQuery+Ajax의 조합을 연습하자!</h1>

<hr/>

<div class="question-box">
    <h2> 서울시 OpenAPI(실시간 대기환경 정보)를 이용하기</h2>
    <p>모든 관측소(MSRSTE_NM)의 미세먼지 수치(PM10)를 표기해주세요</p>
    <p>업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.</p>
    <button onclick="showMiseInfo()">업데이트</button>
    <ul id="mise-info">
        <li>중구 : 82</li>
        <li>종로구 : 87</li>
        <li>용산구 : 84</li>
        <li>은평구 : 82</li>
    </ul>
</div>
</body>

</html>

사용할 코드

완성된 모습

 

우리는 위의 사진처럼 업데이트 버튼을 누를때 마다 모든 관측소의 미세먼지 수치를 표기하는 페이지를 만들 것이다

 

완성코드는 아래와 같다

 function showMiseInfo() {
            // 여기에 코드를 입력하세요
            $('#mise-info').empty();
            $.ajax({
                type: "GET",
                url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
                data: {},
                success: function (response) {
                    let rows = response["RealtimeCityAir"]["row"];
                    for (let i = 0; i < rows.length; i++) {                       
                        let tempHtml = `<li>${rows[i]['MSRSTE_NM']} : ${rows[i]['PM10']}</li>`
                        $('#mise-info').append(tempHtml);
                    }
                }
            })
        }

 

업데이트 버튼을 누르면 onclick 이벤트에 의해 showMiseInfo라는 함수가 실행이 된다

$('#mise-info').empty();   →   id가 mise-info인 태그의 내용을 모두 지워라

$.ajax({  →   ajax를 이용하자

type: "GET",    →   GET방식으로 요청한다(데이터 읽기 read)
url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",  →   API주소data: {},  →   요청하면서 함께 '줄' 데이터(GET 요청시에는 비워둔다)
success: function (response) {  →   서버에서 준 결과를 response라는 변수에 담아라

let rows = response["RealtimeCityAir"]["row"];  →   rows를 response에 RealtimeCityAir라는 값의 row 값이라고 하자

API를 보면 row값은 list로 구성되어 있는 것을 알 수 있다

for (let i = 0; i < rows.length; i++) {  →   반복문

let tempHtml = `<li>${rows[i]['MSRSTE_NM']} : ${rows[i]['PM10']}</li>`  →   tempHtml을 rows의 i번째 항목의 MSRSTE_NM값 : rows의 i번째 항목의 PM10값이라고 하자
'${문자화}'는 {}안의 값을 문자로 나타내는 형식이다

$('#mise-info').append(tempHtml);  →   mise-info라는 id를 가진 태그의 맨 마지막에 tempHtml의 값을 추가하자

결과값

 

 

업데이트 버튼을 누르면 ajax에 의해 전체 페이지가 새로고침되는 것이 아니라 GET으로 가져온 값만 업데이트 되는 것을 확인할 수 있다

 

 

 

공감 부탁 드려요 :) 

 

반응형