Javascript, jQuery, Fetch

SCPKYG·2023년 3월 26일
0

Javascript 는 웹을 움직이게 하는 코드.

  • 브라우저는 Javascript만 인식, HTML안에다 파이썬, java는 인식이 안됌.(그래서 리엑트도 Javascript)
  • 역사적인 이유 & 이미 만들어진 표준 이기 때문에, 모든 브라우저는 기본적으로 Javascript를 알아듣게 설계되어있고, 모든 웹서버는 HTML+CSS+Javascript를 주게 되어있죠.
<head> ~ </head> 안에 <script> ~ </script> 로 공간을 만들어 작성합니다.

버튼에 함수 연결하기

<button onclick="hey()">영화 기록하기</button>

  • (1)버튼을 클릭하면, (2)hey를 불러라! (3)alert(’안녕’)을 실행해라 라는 뜻

  • 프로그래밍에서는 정해진 일을 반복하는 친구를 함수라하며 function hey()라는 규칙으로 hey라는 함수를 만들었고,
    alert(’안녕’)이라는 작업을 원할 때마다 반복적으로 수행하게 만들었다.
    alert"알리다"라는 뜻
    function"기능"이라는 뜻

화면에 미리 찍어보기

console.log()
예시

<script>
	funtion hey() {
		console.log('안녕하세요')
	}
</script>

<body>
	<button onclick="hey()">영화 기록하기</button>
</body>
  • console.log()확인 방법

변수 & 기본연산

let a = 2
a = 'Bob' // 문자열은 작은 따옴표로 감싸줍니다!

// 변수는 값을 저장하는 박스예요.
// 처음 변수를 저장하려면, let을 앞에 붙여주세요!
// 한 번 선언했으면, 다시 선언하지 않고 값을 넣습니다.

사칙연산, 그리고 문자열 더하기가 기본적으로 가능

let a = 2
let b = 3

console.log(a+b) // 5

let c = '대한'
let d = '민국'

console.log(c+d) // 대한민국

리스트: 순서를 지켜서 가지고 있는 형태입니다.

let a_list = [] // 리스트를 선언. 변수 이름은 역시 아무렇게나 가능!
(프로그래밍에서 뭔가를 셀 때는 0부터 시작한다)

// 또는,

let a = ['사과','수박','딸기','감'] // 로 선언 가능

console.log(a[1]) // 수박
console.log(a[0]) // 사과

//리스트 길이 구하기
console.log(a.length) //4

딕셔너리: 키(key)-밸류(value) 값의 묶음

let a_dict = {} // 딕셔너리 선언. 변수 이름은 역시 아무렇게나 가능!

// 또는,

let a = {'name':'영수','age':27} // 로 선언 가능

console.log(a)
console.log(a['name']) // 영수
console.log(b_dict['age']) // 27

리스트와 딕셔너리의 조합

let a = [
{'name':'영수','age':27},
{'name':'철수','age':15},
{'name':'영희','age':20}
]
console.log(a[0]['name']) //영수
console.log(a[1]['age']) //15

  • 꺾쇠와 키-밸류, 이 두가지로 이뤄진 형태의 자료를 정~말 많이 씁니다!
    이게 기초가 되는 문법

※리스트는 []가 생겼으니까 []로 가져오는데, 딕셔너리는 {}로 만들었는데 {}로 왜 안가져오는가…
이게 이렇게 생긴 이유와 원리를 찾아가면 너~무 코딩이 어려워져요..!

  • 이런 규칙들은 프로그래밍 언어를 만든 사람이 그때그때 목적에 맞게 작성한 것이에요! → 따라서 규칙을 설정하는 것도 다 제각각이겠죠?
  • 있는 그대로! 아 얘는 이렇게 쓰는거구나.. 하고 받아 들여주세요!

나눗셈의나머지

let a = 20
let b = 7

a % b = 6

특정 문자로 문자열을 나누고 싶은 경우

**, 특정 문자로 문자열을 나누고 싶은 경우**

let myemail = 'sparta@gmail.com'

let result = myemail.split('@') // ['sparta','gmail.com']

result[0] // sparta
result[1] // gmail.com

let result2 = result[1].split('.') // ['gmail','com']

result2[0] // gmail -> 우리가 알고 싶었던 것!
result2[1] // com

myemail.split('@')[1].split('.')[0] // gmail -> 간단하게 쓸 수도 있다!

반복문 지명.forEach(()=>{})

let fruits = ['사과','배','감', ... ,'귤']
console.log('사과')
console.log('배')
console.log('감')
...
console.log('귤')

// 이렇게 100개 씩 쓰기엔 무리가 있겠죠? 그래서, 반복문이라는 것이 존재합니다!
forEach라는 친구로 간단하게 뽑아볼 거에요!

fruits.forEach((a) => {
	console.log(a)
}) 
// fruits 의 요소를 하나씩 확인하는데 이름은 a라고 할 거에요!
// a는 b,c,zzz,fruit 어떤 걸로 해도 상관 없어요!

조건문 if else

if (조건) {
	// 조건에 맞다면~
} else {
	// 아니라면~
}

만약 20살보다 크면 성인입니다 작으면 청소년입니다 를 출력하려면

let age = 24

if (age > 20) {
	console.log('성인입니다')
} else {
	console.log('청소년입니다')
}

반복문+조건문 합치기

let ages = [12,15,20,25,17,37,24]

ages.forEach((a)=> {
	if (a > 20) {
		console.log('성인입니다')
	} else {
		console.log('청소년입니다')
	}
})

append

let temp_html = `<p>${a}</p>`처럼 변수 대입 가능
$('#q1').empty()는 q1에서 기존에 있는 애들을 비워라 라는 뜻
function checkResult() {
	let fruits = ['사과','배','감','귤','수박']
	$('#q1').empty()
	fruits.forEach((a)=>{
		let temp_html = `<p>${a}</p>`
		$('#q1').append(temp_html)
	})
}
let people = [
            { 'name': '서영', 'age': 24 },
            { 'name': '현아', 'age': 30 },
            { 'name': '영환', 'age': 12 },
            { 'name': '서연', 'age': 15 },
            { 'name': '지용', 'age': 18 },
            { 'name': '예지', 'age': 36 }
        ]
        $('#q2').empty()
        people.forEach((a) => {
            let name = a['name']
            let age = a['age']
            let temp_html = `<p>${name}는 ${age}살입니다.</p>`
            $('#q2').append(temp_html)

append

  • 1) 원하는 html 태그를 백틱(````)으로 묶어 주세요!
  • 2) 태그 안에 들어갈 값은 ${} 로 표시하고, 그 안에는 자료가 있는 변수를 넣어주세요!
  • 3) 통째로 넣을 html 요소를 $('#아이디')로 골라주시고 appnd(변수)를 넣어주세요!

백틱

백틱은 문자와 변수를 함께 써줄 수 있도록 하는 특수기호

let profile = `${nameDict['name']}의 나이는 ${nameDict['age']}살 입니다`

jQuery는 html 뼈대를 선택해서 쉽게 조작할 수 있다.

  • javascript만 사용하면 복잡하니까 jQuery도 쓰는 겁니다!
  • HTML의 요소들을 조작하는, 편리한 Javascript를 미리 작성해둔 것. 라이브러리.
  • 코드가 복잡하고 브라우저 간 호환성 문제도 고려해야해서,jQuery라는 라이브러리가 등장하게 되었답니다.

예시
Javascript로도 모든 기능(예 - 버튼 글씨 바꾸기 등)을 구현할 수는 있다.
-Javascript

document.getElementById("element").style.display = "none";

jQuery $('#').명령어.(지명)

$가 들어가면 전부 jQuery

$('#element').hide();

jQuery로 보다 직관적으로 쓸 수 있다.

  • 미리 작성된 Javascript 코드를 가져오는 것을 '임포트'라고 부른다.

jQuery CDN 부분을 참고해서 임포트
https://www.w3schools.com/jquery/jquery_get_started.asp

<head></head> 사이에 아래를 넣으면 끝!
<head>
    <title>자바스크립트 문법 연습하기!</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>

Fetch는 짧은 코드로 요청을 보내고 받아올 수 있다.

Fetch를 쓰면서 jQuery를 사용할 것이기 때문에
jQuery를 임포트한 페이지에서만 동작 할 거에요!
Uncaught TypeError: $ is not a function
→ jQuery 라는 게 없다는 뜻

Fetch 기본 골격

<script>
	fetch("http://spartacodingclub.shop/sparta_api/seoulair").then(res => res.json()).then(data => {
			console.log(data)
	})
</script>

Fetch 코드 해설

fetch("여기에 URL을 입력") // 이 URL로 웹 통신을 요청한다. 괄호 안에 다른 것이 없다면 GET!
	.then(res => res.json()) // 통신 요청을 받은 데이터는 res라는 이름으로 JSON화 한다
	.then(data => { 
		console.log(data) // 개발자 도구에 찍어보기
	}) // JSON 형태로 바뀐 데이터를 data라는 이름으로 붙여 사용한다

Fetch 코드 설명

- `fetch("여기에 URL을 입력")` ← 이 URL로 웹 통신 요청을 보낼 거야!
    - ← 이 괄호 안에 **URL밖에 들어있지 않다면** `기본상태인 GET!`
- `.then()` ← 통신 요청을 받은 다음 이렇게 할 거야!
- `res ⇒ res.json()`
    - ← 통신 요청을 받은 데이터는 res 라는 이름을 붙일 거야(변경 가능)
    - ← res는 JSON 형태로 바꿔서 조작할 수 있게 할 거야!
- `.then(data ⇒ {})` ←JSON 형태로 바뀐 데이터를 data 라는 이름으로 붙일거야

Fetch 예시


RealtimeCityAir > row 에 미세먼지 데이터가 들어있다.

fetch("http://spartacodingclub.shop/sparta_api/seoulair")
	.then(res => res.json()) 
	.then(data => { 
		console.log(data['RealtimeCityAir']['row'][0]);
	})

row의 값을 rows에 담았으니, 반복문 이용.

fetch("http://spartacodingclub.shop/sparta_api/seoulair") // 기본 요청(GET)
	.then(res => res.json()) // 요청해서 받은 데이터를 JSON화
	.then(data => { // JSON화 한 데이터를 다시 data로 이름짓기
		let rows = data['RealtimeCityAir']['row']
		rows.forEach((a) => {
			// 미세먼지 데이터 리스트의 길이만큼 반복해서 하나씩 개발자 도구에서 보기
			console.log(a)
		})
	})


키 값인 "MSRSTE_NM", 미세먼지 수치 키값인 "IDEX_MVL"의 밸류를 출력

fetch("http://spartacodingclub.shop/sparta_api/seoulair") // 기본 요청(GET)
	.then(res => res.json()) // 요청해서 받은 데이터를 JSON화
	.then(data => { // JSON화 한 데이터를 다시 data로 이름짓기
		let rows = data['RealtimeCityAir']['row']
		rows.forEach((a) => {
			// 미세먼지 데이터 리스트의 길이만큼 반복해서 하나씩 개발자 도구에서 보기
			// 구의 이름, 미세먼지 수치 값을 개발자 도구에서 찍어보기
			console.log(a['MSRSTE_NM'], a['IDEX_MVL'])
		})
	})

완성된 데이터

fetch("http://spartacodingclub.shop/sparta_api/seoulair").then(res => res.json()).then(data => { 
		let rows = data['RealtimeCityAir']['row']
		rows.forEach((a) => {
			console.log(a['MSRSTE_NM'], a['IDEX_MVL'])
		})
	})

Fetch 응용

일정 수치 이상인 곳은 빨갛게 보이게

    <style>
        div.question-box {
            margin: 10px 0 20px 0;
        }
        .bad {
            color: red;
        }
    </style>

    <script>
			function q1() {
        fetch("http://spartacodingclub.shop/sparta_api/seoulair").then((response) => response.json()).then((data) => {
            $('#names-q1').empty()
						let rows = data['RealtimeCityAir']['row']
            rows.forEach((a) => {
                let gu_name = a['MSRSTE_NM']
								let gu_mise = a['IDEX_MVL']
								let temp_html = ``
								if (gu_mise > 40) {
									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>코드를 입력하세요

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

JSONView를 설치

https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=ko
JSON은, Key:Value로 이루어져 있습니다. 자료형 Dictionary와 아주- 유사하죠

예시 서울시 미세먼지
http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99

클라이언트가 요청 할 때에도, "타입"이라는 것이 존재합니다.

  • GET → 통상적으로! 데이터 조회(Read)를 요청할 때
    예) 영화 목록 조회

  • POST → 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때
    예) 회원가입, 회원탈퇴, 비밀번호 수정

profile
뉴비입니다.

0개의 댓글