슈코딩

jQuery & Ajax 본문

코딩공부/웹개발

jQuery & Ajax

Roshu 2022. 4. 19. 10:46

 

1. jQuery

-jQuery 는 미리 짜둔 Javascript의 라이브러리이다. ( CSS의 부트스트랩과 동일성향 ) 
-> 길고 복잡한 Javascript 를 직관적이게 쓸 수 있게 된다.


-jQuery 는 아래의 코드를 html에 넣어야 사용할 수 있다.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>


-jQuery는 아래코드처럼 작성을 한다. (예시)

$('#명칭').명령어();


-Javascript 때 명칭을 지칭하던 class 가 jQuery에선 id 로 지칭한다. (예시)

<div class="mypost" id ="post-box">
<div id="cards-box" class="row row-cols-1 row-cols-md-4 g-4">

 

위의 포스트 박스와 카드 박스를 토대로 기능을 적용 해보면

#감추고 나타내기
감추기 : $('#post-box').hide()
나타내기 : $('#post-box').show()

#포스팅 카드 이어붙이기
 ! 이어 붙일땐 let temp_html = `  ` 을 작성하고 `  ` 안에 이어붙일 코드를 복사 후 붙여넣기 한다.

붙이기 : $('#cards-box').append(temp_html)


2. 서버-클라이언트 통신


- 서버는 JSON 형식으로 클라이언트에게 데이터를 보내준다. 
-JSON은 key:value 형식으로 이루어져있다. ( 딕셔너리와 유사하다 ) 


#API = 은행창구 역할 !
클라이언트 -> 서버 요청시 2가지 보편적인 타입이 존재 ( 이외에도 여러가지 타입이 있지만 우리가 알아야할 건 두가지 )
GET -> 데이터 조회 (Read)
POST -> 데이터 생성, 변경, 삭제 요청시 ex) 회원가입, 회원탈퇴, 비밀번호 변경


3. Ajax

- 서버와 클라이언트가 통신하는 수단?
#Ajax의 기본 골격 

$.ajax({
  type: "GET",
  url: "여기에URL을입력",
  data: {},
  success: function(response){
    console.log(response)
  }
})

 

-type : 요청하는 방식
-url : 데이터를 가져올 주소를 적는다. ex) 미세먼지 Open API
-data : GET 요청시엔 비워둔다.
-function(response) {} : 중괄호 안에 반복문을 이용해 가져오고 싶은 데이터만 추출한다.

$.ajax({
  type: "GET",
  url: "http://spartacodingclub.shop/sparta_api/seoulair",
  data: {},
  success: function (response) {
    let rows = response["RealtimeCityAir"]["row"];
    for (let i = 0; i < rows.length; i++) {
      let mise = rows[i];
      let gu_name = mise["MSRSTE_NM"];
      let gu_mise = mise["IDEX_MVL"];
      console.log(gu_name, gu_mise);
    }
  }
});

 

이처럼 코드를 작성하면 구의 이름과 그 구의 미세먼지값만 추출할수가 있다.

#Ajax 연습

p-1. 따릉이 OpenAPI 이용해서 서울시 위치별 따릉이 현황 데이터 가져오기

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

<head>
    <meta charset="UTF-8">
    <title>JQuery 연습하고 가기!</title>
    <!-- JQuery를 import 합니다 -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

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

        table {
            border: 1px solid;
            border-collapse: collapse;
        }

        td,
        th {
            padding: 10px;
            border: 1px solid;
        }

        .urgent {
            color : red;
        }
    </style>

    <script>
        function q1() {
            $('#names-q1').empty()
            $.ajax({
                type: "GET",
                url: "http://spartacodingclub.shop/sparta_api/seoulbike",
                data: {},
                success: function (response) {
                    let rows = response['getStationList']['row']
                    for (let i = 0; i < rows.length; i++) {
                        let name = rows[i]['stationName']
                        let rack = rows[i]['rackTotCnt']
                        let bike = rows[i]['parkingBikeTotCnt']

                        let temp_html = ``

                        if (bike < 5) {
                                temp_html = `<tr class= "urgent">
                            <td>${name}</td>
                            <td>${rack}</td>
                            <td>${bike}</td>
                        </tr>`
                        }else {
                            temp_html = `<tr class>
                            <td>${name}</td>
                            <td>${rack}</td>
                            <td>${bike}</td>
                        </tr>`
                        }



                        $('#names-q1').append(temp_html)
                    }

                }
            })
        }
    </script>

</head>

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

<hr/>

<div class="question-box">
    <h2>2. 서울시 OpenAPI(실시간 따릉기 현황)를 이용하기</h2>
    <p>모든 위치의 따릉이 현황을 보여주세요</p>
    <p>업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.</p>
    <button onclick="q1()">업데이트</button>
    <table>
        <thead>
        <tr>
            <td>거치대 위치</td>
            <td>거치대 수</td>
            <td>현재 거치된 따릉이 수</td>
        </tr>
        </thead>
        <tbody id="names-q1">
        </tbody>
    </table>
</div>
</body>

</html>



p-2. 랜덤 르탄이 API 이용해서 업데이트시마다 새로운 이미지 데이터 가져오기

<!doctype html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>JQuery 연습하고 가기!</title>
    <!-- JQuery를 import 합니다 -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

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

        div.question-box > div {
            margin-top: 30px;
        }

    </style>

    <script>
        function q1() {
            $.ajax({
                type: "GET",
                url: "http://spartacodingclub.shop/sparta_api/rtan",
                data: {},
                success: function (response) {
                    let url = response['url']
                    let msg = response['msg']

                    $('#img-rtan').attr('src', url)
                    $('#text-rtan').text(msg)
                }
            })
        }
    </script>

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

<hr/>

<div class="question-box">
    <h2>3. 르탄이 API를 이용하기!</h2>
    <p>아래를 르탄이 사진으로 바꿔주세요</p>
    <p>업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.</p>
    <button onclick="q1()">르탄이 나와</button>
    <div>
        <img id="img-rtan" width="300" src="http://spartacodingclub.shop/static/images/rtans/SpartaIcon11.png"/>
        <h1 id="text-rtan">나는 ㅇㅇㅇ하는 르탄이!</h1>
    </div>
</div>
</body>
</html>



p-3. 2주차 숙제 ! 날씨 API 이용해서 1주차 숙제 제목아래 현재 기온 : 00.0도 데이터 가져오기

<!doctype html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
            integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
            crossorigin="anonymous"></script>

    <title>스파르타코딩클럽 | 부트스트랩 연습하기</title>
    <style>
        * {
            font-family: 'Gowun Dodum', sans-serif;
        }

        .mytitle {
            background-color: green;

            height: 250px;
            width: 100%;

            background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url("https://images.chosun.com/resizer/TRylAoJ09lTz-DxqRkoC7Q5cmqA=/616x0/smart/cloudfront-ap-northeast-1.images.arcpublishing.com/chosun/IGUWJMF4RVAVNB4JXPDZLJME6Q.jpg");
            /*url 앞의 코드는 배경이미지를 어둡게 해준다*/
            background-position: top;
            background-size: revert;

            color: white;

            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            /*위에 4가지는 사진 안의 내용물을 가운데로 정렬하는 묶음*/
        }

        .card {
            max-width: 500px;
            width: 95%;
            margin: auto;
            margin-top: 15px;

        }

        .mypost {

            max-width: 500px;
            width: 95%;
            margin: 20px auto 0px auto;

            box-shadow: 0px 0px 3px 0px gray;
            padding: 20px;


        }

        .btns {
            margin-top: 10px;
        }

        .btns > button {
            margin-right: 10px;
        }

        .pink {
            color : deeppink;
        }
    </style>
    <script>
        $(document).ready(function(){
            $.ajax({
                type: "GET",
                url: "http://spartacodingclub.shop/sparta_api/weather/seoul",
                data: {},
                success: function (response) {
                    let temp = response['temp']

                    $('#temp').text(temp)
                }
            })
        });
    </script>
</head>

<body>
    <div class="mytitle">
        <h1>블랙<span class = "pink">핑크</span> 팬명록</h1>
        <p>현재기온 : <span id="temp">00.0</span>도</p>
    </div>
    <div class="mypost">
        <div class="form-floating mb-3">
            <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
            <label for="floatingInput">닉네임</label>
        </div>
        <div class="form-floating">
                <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea"
                          style="height: 100px"></textarea>
            <label for="floatingTextarea">응원댓글</label>
        </div>
        <div class="btns">
            <button type="button" class="btn btn-dark">응원 남기기</button>
        </div>
    </div>
    <div class="card">
        <div class="card-body">
            <blockquote class="blockquote mb-0">
                <p>새로운 앨범 너무 멋져요!</p>
                <footer class="blockquote-footer">호빵맨</footer>
            </blockquote>
        </div>
    </div>
    <div class="card">
        <div class="card-body">
            <blockquote class="blockquote mb-0">
                <p>새로운 앨범 너무 멋져요!</p>
                <footer class="blockquote-footer">호빵맨</footer>
            </blockquote>
        </div>
    </div>
    <div class="card">
        <div class="card-body">
            <blockquote class="blockquote mb-0">
                <p>새로운 앨범 너무 멋져요!</p>
                <footer class="blockquote-footer">호빵맨</footer>
            </blockquote>
        </div>
    </div>
</body>

</html>


이렇게 Ajax 를 반복연습하다보니 Ajax에 대한 이해도가 높아지고 더 다양한 응용을 해보고 싶다는 생각이 들었다.
jQuery와 Ajax 처음엔 정말 이해도 안되고 어려웠지만,

강의를 2번 3번 듣다보니 활용을 할 수 있게되서 도움이 많이되었다.


2주차 강의 숙제도 끝!

'코딩공부 > 웹개발' 카테고리의 다른 글

Flask & 서버에 웹페이지 배포  (0) 2022.04.25
웹동작의 개념부터 Javascript 까지  (2) 2022.04.18
Comments