[스파르타코딩클럽] 웹개발 종합반 - 2주차(3)

2-10 Quiz_Ajax 연습하기(1)

서울시 OpenAPI(실시간 따릉이 현황)를 이용하기

1-1.따릉이 현황 나타내기

  • 정답
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 cnt = rows[i]['rackTotCnt']
                        let bike = rows[i]['parkingBikeTotCnt']

                    let temp_html =`<tr>
                    <td>${name}</td>
                    <td>${cnt}</td> 
                    <td>${bike}</td>
                </tr>`
                $('#names-q1').append(temp_html)
                }
            }
        })
    }



  • 나의 코드
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 cnt = rows[i]['rackTotCnt']
                        let bike = rows[i]['parkingBikeTotCnt']
                    
                  ❌❌❌ let temp_html=`<td>${name}${cnt}${bike}</td>`❌❌❌
                    }
                    $('#names-q1').append(temp_html)
                }        
            })
        }

let temp_html
바로 전에 풀었던 미세먼지 지수 퀴즈를 그대로 응용하는 문제였는데 그거 보면서 그 코드를 그대로 따라 쓰는 바람에 틀리고 말았다. (이해는 빠르나 응용이 안되는 편)

  • 미세먼지
	<ul id="names-q1">
            <li>중구 : 82</li>
            <li>종로구 : 87</li>
            <li>용산구 : 84</li>
            <li>은평구 : 82</li>
        </ul>       

  • 따릉이
<tbody id="names-q1">
                <tr>
                    <td>102. 망원역 1번출구 앞</td>
                    <td>22</td>
                    <td>0</td>
                </tr>
                <tr>
                    <td>103. 망원역 2번출구 앞</td>
                    <td>16</td>
                    <td>0</td>
                </tr>
                <tr>
                    <td>104. 합정역 1번출구 앞</td>
                    <td>16</td>
                    <td>0</td>
                </tr>
            </tbody>

미세먼지는 names-q1 안에 li 하나의 코드만 있지만 따릉이는 tr 안에 td가 있는 이중구조였다는 걸 간과한 것이다.

temp_html = `<li>${gu_name} : ${gu_mise}</li>`

그래서 미세먼지는 temt_html에 li 코드 하나만 적어도 되지만 따릉이는 tr, td 둘 다 적어줘야 한다. 멍청한 나는 또 출력될 내용이 td 안에 있으니까 li와 td가 곧이 곧대로 대응이 되는 줄 알았다...^^

그리고 또 하나,

names-q1에 원래부터 적혀있던 내용을 지워야 하는데 그걸 또 놓치고 지나갔다.

1-2.조건문 응용하기

  • 정답
<sytle>
        .urgent {
            color: red;
            font-weight: bold;
        }
</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 rack_name = rows[i]['stationName'];
                        let rack_cnt = rows[i]['rackTotCnt'];
                        let bike_cnt = rows[i]['parkingBikeTotCnt'];
                        let temp_html = '';
                        if (bike_cnt < 5) {
                            temp_html = `<tr class="urgent">
                                <td>${rack_name}</td>
                                <td>${rack_cnt}</td>
                                <td>${bike_cnt}</td>
                              </tr>`
                        } else {
                            temp_html = `<tr>
                                <td>${rack_name}</td>
                                <td>${rack_cnt}</td>
                                <td>${bike_cnt}</td>
                              </tr>`
                        }
                        $('#names-q1').append(temp_html);
                    }
                }
            })
        }
    </script>

</head>

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

    <hr />

    <div class="question-box">
  • 나의 코드
<style>
.good {
            color: blue;
            font-weight: bold;
        }

        .bad {
            color: red;    
            font-weight: bold;
        }
</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 cnt = rows[i]['rackTotCnt']
                        let bike = rows[i]['parkingBikeTotCnt']

                    let temp_html =``
                        if (bike > 10) {
                            temp_html = `<tr class="good">
                    <td>${name}</td>
                    <td>${cnt}</td> 
                    <td>${bike}</td>
                </tr>`
                        } else if (bike < 3) {
                            temp_html = `<tr class="bad">
                    <td>${name}</td>
                    <td>${cnt}</td> 
                    <td>${bike}</td>
                </tr>` 
                        } else {
                            temp_html = `<tr>
                    <td>${name}</td>
                    <td>${cnt}</td> 
                    <td>${bike}</td>
                </tr>`
                        }
                $('#names-q1').append(temp_html)
                }
            }
        })
    }
    </script>

이번엔 틀린 거 아님. 드디어 응용에 성공한 거임.
예전 수업 때 배운 조건문 중 else if를 활용해서 10보다 많으면 파란색, 3보다 적으면 빨간색으로 구현되도록 짜보았다.
실행하면 이런식으로 출력된다😎


2-10 Quiz_Ajax 연습하기(1)

랜덤 고양이 사진 API를 이용하기

  • 정답
function q1() {
            $.ajax({
                type: "GET",
                url: "https://api.thecatapi.com/v1/images/search",
                data: {},
                success: function (response) {
                    let imgurl = response[0]['url']
                    $('#img-cat').attr('src',imgurl)
                }
            })
        }

  • 나의 코드
function q1() {
        $.ajax({
                type: "GET",
                url: "https://api.thecatapi.com/v1/images/search",
                data: {},
                success: function (response) {
                    ❌❌❌ let url = response['url'][0] ❌❌❌
                }
               ❌❌❌ $("#img-cat").attr("src","url") ❌❌❌
        })
      }

let url
이제 변수를 써야하는 상황은 확실히 아는데 변수 유형이 바뀌기라도 하면 그것을 어떻게 호출해야 하는지 응용이 안된다. 여기에선 let imgurl = response[0]['url']를 적기 전, succsses: function(response) 다음에 console.log(response)를 사용했어야 했다.

[{…}]
 0:
   breeds: []
   height: 276
   id: "vxMLPUGso"
   url: "https://cdn2.thecatapi.com/images/vxMLPUGso.png"
   width: 388
 __proto__: Object
 length: 1
 __proto__: Array(0)

개발자 도구에서 확인하면 [0][url]이라는 url의 경로를 파악할 수 있다. 나는 순서만 바꿔서 썼는데 저것도 얻어 걸렸다. 뭘 알고 쓴 게 아니다.

$('#id값').attr(src,변수값) : JQuery를 활용한 이미지의 src 변경
얼핏 보면 맞는 것 같지만 따옴표도 잘못 쓰고 코드도 } 안에 들어가야 한다. 하여튼 잘 안돼서 보면 이런 실수가 90% 이상이라니까...^^


민윤기의 믹테 가사가 생각나는 요즘...가끔씩 내가 천재인 것 같다가도 가끔씩 내가 재능이 없는 것 같기도 해^^... 나는 천재라는 생각조차 해본 적도 없다는 게 함정 가르쳐 준 건 기가 막히게 잘 하는데 기출 변형이라도 나오면 탁 막히니 암담하기만 하다.... IT업계에 종사하는 친구가 나보고 개발 잘할 것 같다고 했는데 아니었나봐 친구야....친구들이 나보고 컴퓨터, 로봇, AI 같다고 해서 나도 기계처럼 사고할 수 있다고 생각했는데...이렇게 휴먼이었단 게 증명 되었네요...^^ 이 코드들이 어떤 매커니즘으로 작동하는 건지 이해하려고 하지 말고 그냥 외우라는 얘기를 1주차 때부터 거의 매수업시간마다 들었는데 그게 잘 안 된다. INTP특인가 애초에 나란 사람자체가 원리를 파악해야만 이해하는 사고방식을 가져서 무조건 그냥 외우는 게 안 된다. 아니 차라리 영단어처럼 아무 이유없이 외우기만 하면 되는 거면 아주 간단한 문젠데 이해가 필요한 영역에는 매커니즘을 알고싶어서 미칠 것 같음.......하...어렵다......왜 그래야 하는지 이유도 모르고 무작정 외우는 것보다는 차라리 톨킨처럼 내가 언어를 직접 창조하는 쪽이 머리는 덜 깨질 것 같음

좋은 웹페이지 즐겨찾기