スパルタエンコーディングクラブ2週間開発ログ


01.学習2週間:jQuery,Ajax


jQueryを使用してJavaScriptを使用して簡単にHTMLを制御します.
Ajexを使用して、サーバにデータを再要求します.

02.Javascriptの復習

  • パリティ方法
  • let even = 4;
    console.log(even % 2); // 2로 나눈 나머지가 0입니다.
    let odd = 5;
    console.log(odd % 2); // 2로 나눈 나머지가 1입니다.
    console.log()は、「console.log()」という文字列を出力する方法です.ブラウザの「開発者ツール」の「コンソール」画面です.コンソールに表示したい内容を出力して、プログラムが正常に動作しているかどうかを確認できます.
  • 偶/奇数onclick関数
  •  <script>
            let count = 1;
            function hey() {
                if (count % 2 == 0) {
                    alert('짝짝짝👏');
                } else {
                    alert('홀홀홀🎅');
                }
    						count += 1;
            }
        </script>

    03.JQuery入門


    1)JQueryとは?


  • HTMLの要素を処理するために便利なJavaScriptを事前に作成しています.ライブラリ!

  • JQuery vs Javascript
    JQueryはJavascriptやその他の特殊なソフトウェアではなく、あらかじめ作成されたJavascriptコードです.プロフェッショナル開発者が作成したコードをインポートして使用します.
    (そのため、書き込み前に「インポート」する必要があります.)
    Javascriptで長くて複雑なものを書きます.
  •    document.getElementById("element").style.display = "none";
    JQueryをより直感的に使用できます.
       $('#element').hide();

    04.JQueryの概要


    1)JQueryの使用


  • あらかじめ作成されたJavascriptコードをインポートすることを「インポート」と呼びます.
    jQuery CDN: https://www.w3schools.com/jquery/jquery_get_started.asp

  • との間にエッジを付けると終わります!
  • <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

  • JQueryの使い方
    cssと同様にjQueryを使用する場合も「指向」→操作が可能です.
    例)特定の足場の値段→持ってきて!
    例)特定のdiv→見えない!
    cssはclassを選択者として使っていますよね?
    jQueryでは、id値でボタン/入力ボックス/div/...を指定します.背中を指さす
  • 2)よく使うJQueryについて

  • すべてのJQueryは暗記しますか?
    A.絶対X!
  • 入力ボックスの値を入力し、
  • を表示します.
    <div class="posting-box">
        <div class="form-group">
            <label for="exampleInputEmail1">아티클 URL</label>
            <input id="post-url" type="email" class="form-control" aria-describedby="emailHelp"
                placeholder="">
        </div>
        <div class="form-group">
            <label for="exampleInputPassword1">간단 코멘트</label>
            <input type="password" class="form-control" placeholder="">
        </div>
        <button type="submit" class="btn btn-primary">기사 저장</button>
    </div>
    // 크롬 개발자도구 콘솔창에서 쳐보기
    // id 값이 post-url인 곳을 가리키고, val()로 값을 가져온다.
    $('#post-url').val();
    表示/非表示
  • div
  • <div class="posting-box" id="post-box">
        <div class="form-group">
            <label for="exampleInputEmail1">아티클 URL</label>
            <input id="post-url" type="email" class="form-control" aria-describedby="emailHelp"
                placeholder="">
        </div>
        <div class="form-group">
            <label for="exampleInputPassword1">간단 코멘트</label>
            <input type="password" class="form-control" placeholder="">
        </div>
        <button type="submit" class="btn btn-primary">기사 저장</button>
    </div>
    // 크롬 개발자도구 콘솔창에 쳐보기
    // id 값이 post-box인 곳을 가리키고, hide()로 안보이게 한다.(=css의 display 값을 none으로 바꾼다)
    $('#post-box').hide();
    
    // show()로 보이게 한다.(=css의 display 값을 block으로 바꾼다)
    $('#post-box').show();
  • cssの値(授業中にdisplay属性値を取得)
  • を取得する.
    $('#post-box').hide();
    $('#post-box').css('display');
    
    $('#post-box').show();
    $('#post-box').css('display');
  • タグのテキストを入力
    (1)inputboxは
  • $('#post-url').val('여기에 텍스트를 입력하면!');
    (2)置換ボタンのテキスト(例)
    // 가리키고 싶은 버튼에 id 값을 준다음
    <button id="btn-posting-box" type="button" class="btn btn-primary">포스팅 박스 열기</button>
    $('#btn-posting-box').text('포스팅 박스 닫기');
  • タグにhtml htmlを入力
    --<デバッガ>~内でhtmlを動的に追加したい場合?
    例)転送された場合->追加カード
    // 사이에 html을 넣고 싶은 태그에 id값을 준 다음
    <div id="cards-box" class="card-columns">
       <div class="card">
         <img class="card-img-top" src="https://www.fodors.com/wp-content/uploads/2018/10/4_UltimateRome_PiazzaNavona-975x650.jpg" alt="Card image cap">
         <div class="card-body">
           <a href="https://naver.com/" class="card-title">여기 기사 제목이 들어가죠</a>
           <p class="card-text">여기에 기사 내용이 들어가겠죠</p>
           <p class="card-text comment">여기엔 코멘트가 들어갑니다</p>
         </div>
       </div>
     </div>
  •  (1) 버튼을 넣어보기
    let temp_html = <button>나는 추가될 버튼이다!</button> ;
    //ここでbacktic(`)で囲まれたtemp htmlは文字列です.
    $('#cards-box').append(temp_html);
    //このHTML文字列をHTMLに変換します.
    $(target).append(source)
    //append()メソッドは、選択した要素の最後に新しいHTML要素またはコンテンツを追加します.
    (2) 버튼 말고, 카드를 넣어보기
    //注意:単一引用符(")ではなくbacktick()으로 감싸야 합니다. // 숫자 1번 키 왼쪽의 버튼을 누르면 backtick()を入力します.
    //backtickでは、文字の間にJavascript変数を挿入できます.
    let img_url = ' https://www.eurail.com/content/dam/images/eurail/Italy%20OCP%20Promo%20Block.adaptive.767.1535627244182.jpg' ;
    let link_url = ' https://naver.com/' ;
    let title=「ここにニュースタイトルがあるでしょう」;
    記事の要約「let desc=」が表示されます.「東の海と白頭山が干上がって、神のご加護、わが国の万歳木槿花三千里の華麗な江山......」
    let comment=「ここにコメントがあります」;
    let temp_html = `
                    <div class="card-body">
                        <a href="${link_url}" class="card-title">${title}</a>
                        <p class="card-text">${desc}</p>
                        <p class="card-text comment">${comment}</p>
                    </div>
                </div>`;
    $('#cards-box').append(temp_html);
    
    5. JQuery 적용하기(나홀로메모장)
    6.
    7. 서버-클라이언트 통신 이해하기
    - 클라이언트 -> 서버: GET요청 이해하기
    
    API는 은행 창구와 같은 것!
    
    같은 예금 창구에서도 개인 고객이냐 기업 고객이냐에 따라
    가져와야 하는 것 / 처리해주는 것이 다른 것처럼,
    
    클라이언트가 요청 할 때에도, "타입"이라는 것이 존재합니다.
    
    * GET  → 통상적으로! 데이터 조회(Read)를 요청할 때
             예) 영화 목록 조회
    
    * POST → 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때.
              예) 회원가입, 회원탈퇴, 비밀번호 수정
    
    이 중에서 오늘은 GET 방식에 대해 배워보겠습니다. (POST는 4주차에 배웁니다)
    
    
    - GET 방식으로 데이터를 전달하는 방법
    
    ?  : 여기서부터 전달할 데이터가 작성된다는 의미입니다.
    & : 전달할 데이터가 더 있다는 뜻입니다.
    
    예시) google.com/search?q=아이폰&sourceid=chrome&ie=UTF-8
    
             위 주소는 google.com의 search 창구에 다음 정보를 전달합니다!
             q=아이폰                        (검색어)
             sourceid=chrome        (브라우저 정보)
             ie=UTF-8                      (인코딩 정보)
    
    
    - 여기서 잠깐, 그럼 code라는 이름으로 영화번호를 주자!는 것은
    누가 정하는 것일까요?
    
    → 네, 바로 프론트엔드 개발자와 백엔드 개발자가 미리 정해둔 약속입니다.
    
    프론트엔드: "code라는 이름으로 영화번호를 주면 될까요?"
    백엔드: "네 그렇게 하시죠. 그럼 code로 영화번호가 들어온다고 생각하고 코딩하고 있을게요"
    
    8. Ajax 시작하기
    (1) Ajax 시작하기
    - 참고: Ajax는 jQuery를 임포트한 페이지에서만 동작 가능.
    
    - Ajax 코드 해설
    $.ajax({
    type:“GET”,//GET方式でお願いします.
    url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99" ,
    data:{},//要求時に同時にローデータを空に保持する(GET要求時に空に保持する)
    成功:function(response){//サーバが提供する結果をresponseという変数に含める
    console.log(応答)/サーバから提供された結果を使用して残りのコードを記述する
    }
    })
    
    - $ajax 코드 설명
    -- type:"GET" -> GET 방식으로 요청한다.
    -- url: 요청할 url
    -- data: 요청하면서 함께 줄 데이터 (GET 요청시엔 비워두세요.)
    
    리마인드
    GET 요청은, url뒤에 아래와 같이 붙여서 데이터를 가져갑니다.
    http://naver.com?param=value&param2=value2 
    
    POST 요청은, data : {} 에 넣어서 데이터를 가져갑니다.
    data: { param: 'value', param2: 'value2' },
    
    -- success: 성공하면, response 값에 서버의 결과 값을 담아서 함수를 실행한다.
    
    成功:function(response){//サーバが提供する結果をresponseという変数に含める
    console.log(response)
    }
    
    (2) Ajax 통신의 결과값을 이용해보기
    
    $.ajax({
    type: "GET",
    url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99" ,
    data: {},
    success: function(response){
    //値ではガイドバー領域のスモッグ値のみ取得
    let dobong = response["RealtimeCityAir"]["row"][11];
    let gu_name = dobong['MSRSTE_NM'];
    let gu_mise = dobong['IDEX_MVL'];
    console.log(gu_name, gu_mise);
    }
    })
    - 모든 구의 미세먼지 값을 찍어보기
    $.ajax({
    type: "GET",
    url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99" ,
    data: {},
    success: function (response) {
    let mise_list = response["RealtimeCityAir"]["row"];
    for (let i = 0; i < mise_list.length; i++) {
    let mise = mise_list[i];
    let gu_name = mise["MSRSTE_NM"];
    let gu_mise = mise["IDEX_MVL"];
    console.log(gu_name, gu_mise);
    }
    }
    });
    9. Ajax 함께 연습하기
    - Ajax 연습
    jQueryの練習を終えてから行きます!
    <!-- 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;
        }
    </style>
    
    <script>
        function q1() {
            // 여기에 코드를 입력하세요
        }
    </script>

    jQuery+Ajaxの組み合わせを練習!

    <hr />
    
    <div class="question-box">
        <h2>1. 서울시 OpenAPI(실시간 미세먼지 상태)를 이용하기</h2>
        <p>모든 구의 미세먼지를 표기해주세요</p>
        <p>업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.</p>
        <button onclick="q1()">업데이트</button>
        <ul id="names-q1">
            <li>중구 : 82</li>
            <li>종로구 : 87</li>
            <li>용산구 : 84</li>
            <li>은평구 : 82</li>
        </ul>
    </div>
    ```
    -Ajax練習(完了)
    ```
    jQueryの練習を終えてから行きます!
    <!-- 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;
        }
    </style>
    
    <script>
        function q1() {
            // 여기에 코드를 입력하세요
            $('#names-q1').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 gu_name = rows[i]['MSRSTE_NM'];
                        let gu_mise = rows[i]['IDEX_MVL'];
                        let temp_html = `<li>${gu_name} : ${gu_mise}</li>`
                        $('#names-q1').append(temp_html);
                    }
                }
            })
        }
    </script>

    jQuery+Ajaxの組み合わせを練習!

    <hr />
    
    <div class="question-box">
        <h2>1. 서울시 OpenAPI(실시간 미세먼지 상태)를 이용하기</h2>
        <p>모든 구의 미세먼지를 표기해주세요</p>
        <p>업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.</p>
        <button onclick="q1()">업데이트</button>
        <ul id="names-q1">
        </ul>
    </div>
    ```
    -[もう一歩]
    スモッグの数値は70以上のところで赤く表示されます.
    完成本
    ```
    jQueryの練習を終えてから行きます!
    <!-- 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;
        }
        .bad {
            color: red;
            font-weight: bold;
        }
    </style>
    
    <script>
        function q1() {
            // 여기에 코드를 입력하세요
            $('#names-q1').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 gu_name = rows[i]['MSRSTE_NM'];
                        let gu_mise = rows[i]['IDEX_MVL'];
    
                        let temp_html = ''
    
                        if (gu_mise > 70) {
                            temp_html = `<li class="bad">${gu_name} : ${gu_mise}</li>`
                        } else {
                            temp_html = `<li>${gu_name} : ${gu_mise}</li>`
                        }
                        
                        $('#names-q1').append(temp_html);
                    }
                }
            })
        }
    </script>

    jQuery+Ajaxの組み合わせを練習!

    <hr />
    
    <div class="question-box">
        <h2>1. 서울시 OpenAPI(실시간 미세먼지 상태)를 이용하기</h2>
        <p>모든 구의 미세먼지를 표기해주세요</p>
        <p>업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.</p>
        <button onclick="q1()">업데이트</button>
        <ul id="names-q1">
        </ul>
    </div>
    ```
    練習
  • Ajax(2)
  • ランダム猫写真API
  • を使用
  • 猫OpenAPI
    リンクテキスト
  • ヒント:Googleで「jQueryイメージラベルsrc置換」を検索!
  • -テスト
    <!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() {
            // 여기에 코드를 입력하세요
          }
        </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-cat" src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"/>
          </div>
        </div>
      </body>
    </html>
  • 完了
  • <!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: "https://api.thecatapi.com/v1/images/search",
              data: {},
              success: function(response){
                  let imgurl = response[0]['url'];
                  $("#img-cat").attr("src", imgurl);
                }
              })
          }
        </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-cat" width="300" src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"/>
          </div>
        </div>
      </body>
    </html>