개발자 되는 중/개발 공부

스파르타 코딩 웹개발 개발일지 2주차 (복습)

SeonChoco 2022. 10. 11. 14:49

html, css, javascript  중

javascript에 jquery라는 간단하게 쓰는 라이브러리

jquery중 api를 이용하는 ajax가 있다

 

1. 저번에 배운 함수 간단 복습

 

클릭 숫자가 홀짝인지 판별하는 함수 만들기

count 0에서 클릭하니까 하나 더 들어가게 할 떄 += 를 넣는다. 

%2로 나누었을 때 0이라면 할 때 == 이꼴 두개 들어간다. 

   let count = 0
      function hey() {
          count += 1
          if(count % 2 == 0) {
              alert('짝')
          } else{
              alert('홀')
          }
      }

02. JQuery 시작하기

 

HTML의 요소들을 조작하는, 편리한 Javascript를 미리 작성해둔 것. 라이브러리!

 

2) jQuery 사용하기

이거 붙여넣기 해야지만이 복사 붙여넣기해서 제대로 사용 할 수 았다.

<head>안에 넣어준다

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

 

CSS에서 꾸며줄 것을 지칭할 때 class를 이용했던 것 처럼 JQuery는 id를 만들어서 지칭해준다.

 

03. JQuery 다뤄보기

1. input 박스의 값을 가져와보기

$('#url').val('입력')
//url 칸에 입력이 들어감
$('#url').val()
'강아지'

2. div 보이기 / 숨기기

$('#post-box').hide() //포스트 박스가 사라진다
$('#post-box').show() // 포스트 박스가 나타난다

3. 태그 내 html 입력하기

1) 버튼을 넣어보기

let temp_html = `<button> 버튼임</button>`
undefined
$('#cards-box').append(temp_html)
S.fn.init [div#cards-box.row.row-cols-1.row-cols-md-4.g-4]

2) 버튼 말고, 카드를 넣어보기

let temp_html = `<div class="col">
                    <div class="card">
                        <img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg" class="card-img-top" alt="...">
                        <div class="card-body">
                            <h5 class="card-title">제목이 들어감</h5>
                            <p class="card-text">내용 들어감</p>
                            <p>⭐⭐⭐</p>
                            <p class="mycomment">코멘트 들어감</p>
                        </div>
                    </div>
                </div>`
undefined
$('#cards-box').append(temp_html)
S.fn.init [div#cards-box.row.row-cols-1.row-cols-md-4.g-4]

temp_html을 정해준대로 들어간다.

let mytitle = '센과 치히로'
undefined
let temp_html = `<div class="col">
                    <div class="card">
                        <img src="https://movie-phinf.pstatic.net/20210728_221/1627440327667GyoYj_JPEG/movie_image.jpg" class="card-img-top" alt="...">
                        <div class="card-body">
                            <h5 class="card-title">${mytitle}</h5>
                            <p class="card-text">내용 들어감</p>
                            <p>⭐⭐⭐</p>
                            <p class="mycomment">코멘트 들어감</p>
                        </div>
                    </div>
                </div>`
undefined
$('#cards-box').append(temp_html)
S.fn.init [div#cards-box.row.row-cols-1.row-cols-md-4.g-4]

04. JQuery 적용하기(포스팅 박스)

1) 포스팅박스 열기/닫기 기능을 붙여보기

<button onclick="hey()">영화 기록하기</button>
<button onclick="hey1()" type="button" class="btn btn-outline-dark">닫기</button>
<script>
    function hey() {
        $('#post-box').show()
    }
    function hey1(){
        $('#post-box').hide()
    }

</script>

 

처음부터 안보이게 하는 기능은 css에서 해줘야한다. style에 들어가서 원하는 것의 class를 찾아 아래 내용을 넣는다. ㅣ: 

display: none;

근데 큰 class로 묶어주고 display: none;을 했더니 Jquery로 보여주기 함수를 만들어서 적용했는데도 작동하지 않았다. 

사라지고 나타날 클래스를 정확히 묶어주고 해야한다.

 

05. Quiz_JQuery 연습하기

jQuery + Javascript의 조합을 연습하자!

강사님이 기본 뼈대랑 id랑 함수이름 맞는 위치에 다 설정해놓으셨다.  그 이름을 활용해서 만들기만 하면 된다.

1. 빈칸 체크 함수 만들기

1-1. 버튼을 눌렀을 때 입력한 글자로 얼럿 띄우기

[완성본]1-2. 버튼을 눌렀을 때 칸에 아무것도 없으면 "입력하세요!" 얼럿 띄우기

function q1() {
if( $('#input-q1').val() == '' ) {
    alert('입력하세요!')
    }
    else {
    alert($('#input-q1').val())
    }

    // 1. input-q1의 입력값을 가져온다. $('# .... ').val() 이렇게!
// 2. 만약 입력값이 빈칸이면 if(입력값=='')
// 3. alert('입력하세요!') 띄우기
// 4. alert(입력값) 띄우기
}

2. 이메일 판별 함수 만들기

2-1. 버튼을 눌렀을 때 입력받은 이메일로 얼럿 띄우기

2-2. 이메일이 아니면(@가 없으면) '이메일이 아닙니다'라는 얼럿 띄우기

[완성본]2-3. 이메일 도메인만 얼럿 띄우기

function q2() {

    if ($('#input-q2').val().includes('@') == true) {
        alert($('#input-q2').val().split('@')[1].split('.')[0])
    } else {
        alert('이메일이 아닙니다')
    }

// 1. input-q2 값을 가져온다.
// 2. 만약 가져온 값에 @가 있으면 (includes 이용하기 - 구글링!)
// 3. info@gmail.com -> gmail 만 추출해서 ( .split('@') 을 이용하자!)
// 4. alert(도메인 값);으로 띄우기
// 5. 만약 이메일이 아니면 '이메일이 아닙니다.' 라는 얼럿 띄우기
}

3. HTML 붙이기/지우기 연습

3-1. 이름을 입력하면 아래 나오게 하기

[완성본]3-2. 다지우기 버튼을 만들기

function q3() {
      if ($('#input-q3').val()=='' ) {
        alert('이름을 입력하세요')
    }else{
        let txt = $('#input-q3').val()
        let temp_html = `<li>${txt}</li>`
        $('#names-q3').append(temp_html)
    }
// 1. input-q3 값을 가져온다. let txt = ... q1, q2에서 했던 걸 참고!
// 2. 가져온 값을 이용해 names-q3에 붙일 태그를 만든다. (let temp_html = `<li>${txt}</li>`) 요렇게!
// 3. 만들어둔 temp_html을 names-q3에 붙인다.(jQuery의 $('...').append(temp_html)을 이용하면 굿!)
}
function q3_remove() {
    $('#names-q3').empty()

// 1. names-q3의 내부 태그를 모두 비운다.(jQuery의 $('....').empty()를 이용하면 굿!)
}

조건에서 '같으면' 은 ==를 써준다. 

강사님은 첫번째랑 두번째 퀴즈에서도 

입력값을 txt로 정해놓고 함수에 이용했다.

 

06. 서버- 클라이언트 통신 이해하기

1) 서버→클라이언트: "JSON"을 이해하기

그냥 OpenAPI에 들어가면 자료들이 보기 힘들게 되어있다

JSONView 다운로드

JSON은 Key:Value로 이루어져있다. 자료형 Dictionary와 아주 유사하다.

 

2) 클라이언트→서버: GET 요청 이해하기

Api는 은행창구과같은것

타입이 있다

GET 타입: 보통 데이터 조회 요청할때 

POST타입: 보통 데이터 생성, 변경, 삭제 요청할 때

 

오늘은 GET방식을 많이 쓸건데

우리는 이미 GET방식을 잘 쓰고 있다. 

주소창에 검색하는게 GET방식

검색창에 넣는 것은 우리가 은행창구에 주민등록번호를 주는 것과 비슷

형식은 미리 약속을 해놓는다.

 

? : 여기서부터 전달할 데이터가 작성된다는 의미입니다.

& : 전달할 데이터가 더 있다는 뜻입니다.

 

https://movie.naver.com/movie/bi/mi/basic.nhn?code=161967

"?" 기준으로 앞부분이 <서버 주소>, 뒷부분이 [영화 번호] 입니다.

 

예시) google.com/search?q=아이폰&sourceid=chrome&ie=UTF-8

위 주소는 google.com의 search 창구에 다음 정보를 전달합니다!

q=아이폰 (검색어)

sourceid=chrome (브라우저 정보)

ie=UTF-8 (인코딩 정보)

 

07. Ajax 시작하기

참고! Ajax는 jQuery를 임포트한 페이지에서만 동작 가능합니다.

(Ajax가 JQuery의 한 종류라서 그런가보다)

JavaScript에서 어떻게 서버를 요청하는지- Ajax를 배워보자

 

 

 

아래의 코드를  script에 넣어준다

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

url 자리에 자료주소 넣는다

 

리마인드 GET 요청은, url뒤에 아래와 같이 붙여서 데이터를 가져갑니다.

http://naver.com?param=value¶m2=value2

POST 요청은, data : {} 에 넣어서 데이터를 가져갑니다.

data: { param: 'value', param2: 'value2' },

success: 성공하면, 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 gu_name = rows[i]['MSRSTE_NM']
                let gu_mise = rows[i]['IDEX_MVL']
                console.log(gu_mise, gu_name)
            }
        }
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 31 '중구'
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 39 '종로구'
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 -99 '용산구'
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 42 '은평구'
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 37 '서대문구'
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 36 '마포구'
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 31 '광진구'
index.html?_ijt=smddej35hd3h439rr56083pii&_ij_reload=RELOAD_ON_SAVE:104 33 '성동구'

08. Ajax 함께 연습하기 (했던건데 진~짜 기억이 안난다.)

서울시 OpenAPI(실시간 미세먼지 상태)를 이용하기

모든 구의 미세먼지를 표기해주세요

업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.

함수 안에 ajax를 넣어준다.(가능한지 몰랐다. 근데 jquery의 한 종류가 ajax니까 생각해보니 당연함)

function q1() {
    $('#names-q1').empty()
    $.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 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)
            }
        }
    })
}

처음 시작할 때 지우고 시작하게 empty() jquery를 냅다 넣어야함

for let 반복문을 이용할 때 괄호 아직 외워서 못한다.

rows를 설정하는 것은 한번 짧게 만들어서 쉽게 쓰기 위함이다.

 

[한걸음 더] 미세먼지 수치가 40이상인 곳은 빨갛게 보여줄까요?

스타일 안에 

.bad {
    color: red;
}

함수 안의 반복문 안에 내용들을 다 넣어줬다.

반복문 안에 조건문도 넣어줬다. 

css를 사용하여 40보다 클 때 빨간색으로 표시해주었다

function q1() {
    $('#names-q1').empty()
    $.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 gu_name = rows[i]['MSRSTE_NM']
                let gu_mise = rows[i]['IDEX_MVL']

                if (gu_mise > 40) {
                   let temp_html = `<li class="bad">${gu_name} : ${gu_mise}</li>`
                    $('#names-q1').append(temp_html)
                } else {
                    let temp_html = `<li>${gu_name} : ${gu_mise}</li>`
                    $('#names-q1').append(temp_html)
                }


            }

        }
    })
}

위와 같이 해도 되지만

let temp_html = ''

if (gu_mise > 40) {
    temp_html = `<li class="bad">${gu_name} : ${gu_mise}</li>`
    $('#names-q1').append(temp_html)
} else {
    temp_html = `<li>${gu_name} : ${gu_mise}</li>`
    $('#names-q1').append(temp_html)
}

temp_html을 빈 문자열로 만들어주고 조건에 따라 만들어주는데 이때 let은 빈 문자열 만들 때 한번만 쓴다

 

09. Quiz_Ajax 연습하기(1) -이쯤 되니까 기억이 새록새록

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

모든 위치의 따릉이 현황을 보여주세요

업데이트 버튼을 누를 때마다 지웠다 새로 씌여져야 합니다.

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

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

[한걸음 더] 따릉이 대수가 5대 미만인 곳은 빨갛게 보여주면 어떨까요?

let temp_html = ''

if (park < 5) {
  temp_html = ` <tr class = bad>
    <td>${name}</td>
    <td>${rack}</td>
    <td>${park}</td>
    </tr>`
  $('#names-q1').append(temp_html)
} else {
  temp_html = `<tr>
    <td>${name}</td>
    <td>${rack}</td>
    <td>${park}</td>
    </tr>`
  $('#names-q1').append(temp_html)
}

10. Quiz_Ajax 연습하기(2)

1) 랜덤 르탄이 API를 이용하기

api가 이미 자동으로 자료가 변하게 되어있는 형식이라서 그런지는 모르겠지만

 

for let 반복문으로 자료를 다 뽑아주려했으나 되지 않았다. 

반복은 없어도 간단하게 각각 이름을 설정했다

그리고 temp_html으로 틀을 만들어주고 append를 마지막에 쓰려고 시도를 하는 와중에 

  • 이미지 바꾸기 : $("#아이디값").attr("src", 이미지URL);
  • 텍스트 바꾸기 : $("#아이디값").text("바꾸고 싶은 텍스트");

힌트에 이미 각각 기능을 하는 jquery를 쓰라고 알려주어서 이대로 했다

그랬더니 성공

 

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

            $('#img-rtan').attr("src", url);
            $('#text-rtan').text(msg);

        }
    })
}

11. 2주차 끝 & 숙제 설명

1주차에 완성한 팬명록에 날씨 정보를 넣어주세요!

로딩이 완료되면,날씨API을 이용해서 날씨를 표시해주세요.

javascript 로딩 후 실행

   $(document).ready(function(){
   alert('다 로딩됐다!')
});

 

 

script부분

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "http://spartacodingclub.shop/sparta_api/weather/busan",
        data: {},
        success: function (response) {
            $('#temp').append(response['temp'])
        }
    })
});

정답 코드는 append 대신에 text를 써주었다

$('#temp').text(response['temp'])

 

body 부분

<div class="mytitle">
    <h1>Doja Cat Fan Book<h1/>
        <p class="mytemp">현재기온: <span id="temp"></span>도</p>
</div>

style 부분

.mytemp{
    font-size: 20px;
}