์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์ํ
- html
- ์๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ๋ก๊ทธ๋๋ฐ
- ๊ฐ๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๊นํ๋จ
- ํ์ด์ฌ
- JavaScript
- Python
- ์ฅํธ์์ค
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- K๋ฐฐํฐ๋ฆฌ
- ์ฑ
- ์ค๋ผํด
- css
- ๋ผํ๋ผ์ค์๋ง๋
- ๋ฐ์ํ
- database
- Java
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ์ฝ๋ฉ
- ๊น๋ฏธ๊ฒฝ
- ๋ ์
- ComputerScience
- ์ปดํจํฐ๊ณผํ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- Today
- Total
JiYoung Dev ๐ฅ
javascript ๋์ ์ด๋ฒคํธ, ๋น๋๊ธฐํต์ ajax (2023.05.04) ๋ณธ๋ฌธ
javascript ๋์ ์ด๋ฒคํธ, ๋น๋๊ธฐํต์ ajax (2023.05.04)
Shinjio 2023. 5. 4. 17:19< ๋ณต์ต >
jQuery : JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์์ ์ ๊ทผ → $(css์ ํ์)
๊ธฐ๋ฅ ์ถ๊ฐ → .๋ฉ์๋()
๋ด์ฉ๋ง → .text()
ํ๊ทธ๊น์ง → .html()
์คํ์ผ์ ์ด → .css()
ํ์ค์ฉ ์
๋ ฅ
$('h1').css('์์ฑ1','๊ฐ1')
$('h1').css('์์ฑ2','๊ฐ2')
$('h1').css('์์ฑ3','๊ฐ3')
chain ๋ฐฉ์
$('h1').css('์์ฑ1','๊ฐ1').css('์์ฑ2','๊ฐ2').css('์์ฑ3','๊ฐ3')
๊ฐ์ฒด ๋ฐฉ์
$('h1').css({
'์์ฑ1' : '๊ฐ1',
'์์ฑ2' : '๊ฐ2',
'์์ฑ3' : '๊ฐ3',
})
๐ ๋์ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ
๐ ์ด๋ฒคํธ ๋ฐ์ด๋ฉ
JS์ฝ๋์ jQuery์ฝ๋๋ ๋๋ถ๋ถ ์ด๋ฒคํธ(event)์ ์ํด ๋์ํจ
์ด๋ฒคํธ๋ ๋ํ์ ์ผ๋ก ํด๋ฆญ, ํค๋ณด๋ ์ ๋ ฅ ๋ฑ ์ฌ์ฉ์์ ์ด๋ค ํ์
โ ์ด๋ฒคํธ ๋ฐ์ด๋ฉ์ ๊ณผ์
1. ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ค ์์ ์ ํ
2. ์ ํํ ์์๊ฐ ์ด๋ค ์ด๋ฒคํธ์ ๋ฐ์ํ ์ง, ์์์ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๋ฐ์ธ๋ฉ ์งํ
3. ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ๋ ์ฝ๋ ์์ฑ
๐ ๋์ ์ด๋ฒคํธ ๋ฐ์ด๋ฉ
๋์ ์ผ๋ก ์์ฑ๋ Element(์ด๋ฒคํธ๋ก ์ธํธ ์์ฑ๋ ์์)์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ธ๋ฉํ๋ค๋ ์๋ฏธ
โ ์ผ๋ฐ ์ด๋ฒคํธ์ ๋์ ์ด๋ฒคํธ ์ฐจ์ด
์ผ๋ฐ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ ๊ฒฝ์ฐ, ์์ฑ๋ ๋์ ์์์์๋ ์ด๋ฒคํธ๊ฐ ์๋ํ์ง ์์
๋ฐ๋ฉด, ๋์ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ ๊ฒฝ์ฐ ์์ฑ๋ ๋์ ์์์์๋ ์ด๋ฒคํธ๊ฐ ์๋ํจ
$(document).on(์ด๋ฒคํธํ์ , ์ด๋ฒคํธ๋์(css์ ํ์), ์ด๋ฒคํธํธ๋ค๋ฌ)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>dynamic event</title>
<style>
button{
width: 100px;
height: 60px;
margin: 5px;
border: none;
border-radius: 10px;
font-weight: 600;
font-size: 1.7rem;
}
.clickBtn{
background-color: lightpink;
}
.onBtn{
background-color: lightgreen;
}
</style>
<script src="./js/jquery-3.6.4.min.js"></script>
</head>
<body>
<button class="clickBtn">click</button>
<button class="onBtn">on</button>
<br>
<script>
// ๋์ ์ด๋ฒคํธ
// → ๋ฌธ์๋ฅผ ๊ฐ์ ธ์์ผ ํจ
// $(document).on(์ด๋ฒคํธํ์
, ์ด๋ฒคํธ๋์(css์ ํ์), ์ด๋ฒคํธํธ๋ค๋ฌ)
// Click ๋ฒํผ ํด๋ฆญ์, click ๋ฒํผ ์์ฑ
$('.clickBtn').click(()=>{
// body ํ๊ทธ์ clickBtn ์์ฑ
$('body').append('<button class="clickBtn">click</button>');
})
// on ๋ฒํผ ํด๋ฆญ์ค, on ๋ฒํผ ์์ฑ
$(document).on('click', '.onBtn', ()=>{
$('body').append('<button class="onBtn">on</button>');
})
</script>
</body>
</html>
๐ jQuery ๋ค์ํ ๋ฉ์๋
// ์ถ๊ฐ ์ ๊ฑฐ ๊ด๋ จ
// attr(์ถ๊ฐํ ์์ฑ, ์์ฑ์๊ฐ) : ์์ฑ ์ถ๊ฐ ๋ฉ์๋
// removeAttr(์ ๊ฑฐํ ์์ฑ) : ์์ฑ ์ ๊ฑฐ ๋ฉ์๋
// removeClass(ํด๋์ค์ด๋ฆ) : ํด๋์ค ์์ฑ๊ฐ ์ ๊ฑฐ ๋ฉ์๋
// $(A).appen(B) : B๋ฅผ A์์ ๋ง์ง๋ง ์์น์ ์ถ๊ฐ ๋ฉ์๋
// $(A).prepend(B) : B๋ฅผ A์์ ์ฒซ๋ฒ์งธ ์์น์ ์ถ๊ฐ ๋ฉ์๋
// input ๊ด๋ จ ๋ฉ์๋
// val() : input ์
๋ ฅ ๊ฐ ์ ๊ทผ (JS : value)
// input ์์ ๊ฐ ๋น์์ฃผ๊ธฐ → input๋ฐํ๊ฐ์ฒด.val('')
// ๋ถ๋ชจ ๊ด๋ จ ๋ฉ์๋
// parent() : ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋ชจ ์์ ์ ํ
// parents() : ๋ชจ๋ ๋ถ๋ชจ ์์ ์ ํ
// closest(์ํ๋์์) : ๋ชจ๋ ๋ถ๋ชจ ์์ ๋์์ผ๋ก ์ํ๋ ์์ ๊ฒ์ํ์ฌ ์ ๊ทผ
// 1. ์ข์์ ๋ฒํผ ํด๋ฆญ์
// ๋ฒํผ ๋ด ๋ฉ์์ง : ์ข์์ → ์ข์์ ์ทจ์
// ์ซ์ : 0 → 1
$(document).on('click', '.likeBtn', (e)=>{
// ๋ฒํผ ๋ด์ฉ ๋ฐ๊พธ๊ธฐ
$(e.target).text('์ข์์ ์ทจ์๐ฅ');
// ์ซ์ ๋ฐ๊พธ๊ธฐ
$('span').text('1');
// likeBtn ํด๋์ค ์ ๊ฑฐ, dislikeBtn ํด๋์ค ์ถ๊ฐ
// $(e.target).removeClass('likeBtn');
$(e.target).removeAttr('class');
$(e.target).attr('class', 'dislikeBtn');
})
// 2. ์ข์์ ์ทจ์ ๋ฒํผ ํด๋ฆญ์
// ์ข์์ ์ทจ์ → ์ข์์
// 1 → 0 ๋ณ๊ฒฝ
$(document).on('click', '.dislikeBtn', (e)=>{
$(e.target).text('์ข์์๐');
$('span').text('0');
// dislikeBtn ํด๋์ค ์ ๊ฑฐ, likeBtn ํด๋์ค ์ถ๊ฐ
$(e.target).removeAttr('class');
$(e.target).attr('class', 'likeBtn');
})
// 3. ๋๊ธ ์์ฑ ๋ฒํผ ํด๋ฆญ์
// ๋๊ธ + ์ญ์ ๋ฒํผ ์์ฑ
$(document).on('click', '.textBtn', ()=>{
let textVal = $('input[type=text]').val();
$('.container').prepend(`
<p>
${textVal}
<button class="removeBtn">์ญ์ เฒฅ_เฒฅ</button>
</p>
`)
// input ์์ ๊ฐ ๋น์์ฃผ๊ธฐ
$('input').val('');
})
// 4. ์ญ์ ๋ฒํผ ํด๋ฆญ์
// ๋๊ธ + ์ญ์ ๋ฒํผ ์ ๊ฑฐ
$(document).on('click', 'button[class=removeBtn]', e=>{
// $(e.target).parent().remove();
// $(e.target).parents().remove();
$(e.target).closest('p').remove();
})
โป ์ถ๊ฐ ๊ด๋ จ ๋ฉ์๋ append vs prepend ์ฐจ์ด
๐ event.target vs this
โ $(this)
์ผ์ข ์ ๋ณ์, ์ ํ์๋ก this ํค์๋๋ฅผ $() ํจ์์ ์ ๋ฌํ๋ฉด, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์๊ธฐ ์์ ์ ๊ฐ์งํ ์ ์์
์ผ๋ฐ์ ์ผ๋ก ๋์ผํ ์์ค๊ฐ ๋ฐ๋ณต๋๋ ๊ณณ์ ์ฌ์ฉ๋จ
ํธ์ถ๋ HTML ๊ฐ์ฒด๋ฅผ ์ ์ฅ → ํ์ดํ ํจ์์์๋ ์๋ํ์ง ์์. ํจ์ ํํ์์์ ์ฌ์ฉ ๊ฐ๋ฅ
$('h1').on('mouseover', function(){
$(this).css('color', 'red');
// this : ํธ์ถ๋ HTML ๊ฐ์ฒด๋ฅผ ์ ์ฅ
// - ํ์ดํ ํจ์์์๋ ์๋ํ์ง ์์
})
์์ ์ฝ๋์์ this๋ HTML์ <h1>์ ์๋ฏธํจ
โ event.target
์ค์ ์ด๋ฒคํธ๊ฐ ์์๋ target ์์
์ด๋ฒคํธ๋ฅผ ์ด๋ฐ์ํจ ์์
ํ์ดํ ํจ์์์ ์ฌ์ฉ ๊ฐ๋ฅ
$(document).on('click', '.dislikeBtn', (e)=>{
$(e.target).text('์ข์์๐');
$('span').text('0');
// dislikeBtn ํด๋์ค ์ ๊ฑฐ, likeBtn ํด๋์ค ์ถ๊ฐ
$(e.target).removeAttr('class');
$(e.target).attr('class', 'likeBtn');
})
โ event.target ํน์ $(this) ์ฌ์ฉํ๋ ์ด์
likeBtn์ HTML์์ ์ฐพ์ ํ ์คํ๋ฌธ์์ ๋ ๋ค์ HTML์์ likeBtn์ ์ฐพ์์ ์คํ → ๋นํจ์จ์
ํ๊ฒ ํน์ this ํ์ฉํ์ฌ ๋ฐ๋ก ์ ๊ทผํ ์ ์๋๋ก!!
๐ ajax ๋น๋๊ธฐํต์ ๋ฐฉ์
๐ ๋๊ธฐํต์ vs ๋น๋๊ธฐํต์
โ ๋น๋๊ธฐ(Asynchronous) ํต์
์๋ฒ์ ์์ฒญ(request)๋ฅผ ๋ณด๋์ ๋ ์๋ต(response) ์ํ์ ์๊ด์์ด ๋ค์ ์์ฒญ(request)์ ์ํํ ์ ์๋ ํต์ ๋ฐฉ๋ฒ
โ ๋๊ธฐ(Synchronous) ํต์
์๋ฒ์ ์์ฒญ(request)๋ฅผ ๋ณด๋์ ๋ ์๋ต(response)์ด ๋์์์ผ ๋ค์ ์์ฒญ(request)์ ์ํํ ์ ์๋ ํต์ ๋ฐฉ๋ฒ
๐ AJAX (Asynchronous JavaScript and XML)
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋น๋๊ธฐ์ ์ ๋ณด ๊ตํ์ด ๊ฐ๋ฅํ ํต์ ๊ธฐ๋ฅ
** ํ๋ฉด ์ ํ ์์ด
๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๊ณ ํ๋ฉด์ ๊ตฌ์ฑํ๋๋ฐ ์์ด์ ์น ํ๋ฉด์ ๊ฐฑ์ ํ์ง ์๊ณ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๊ณ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ
ํ๋ฉด ๊ฐฑ์ ์ด ์์ด์ ์ฌ์ฉ์ ์ ์ฅ์์ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ๋น ๋ฅด๊ฒ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๊ฒ ํจ
ํ์ง๋ง, ๋์ ์ผ๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋งํผ ๊ฐ๋ฐ์์ ๊ตฌํ์ ๋ณต์กํด์ง
๐ ๋ฐ์ดํฐ ํ์
๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์ ์ก ํ์
โ CSV (Comma - Seperated Values)
์ผํ๋ฅผ ๊ธฐ์ค์ผ๋ก ํญ๋ชฉ์ ๊ตฌ๋ถํ์ฌ ์ ์ฅํ ๋ฐ์ดํฐ
โ XML(eXtensible Markup Language)
๋ค๋ชฉ์ ๋งํฌ์ ์ธ์ด๋ก ํ๊ทธ ๋ฑ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ ๊ธฐ์
ํด๋นํ๋ ๊ฐ ์์ชฝ์ ํ๊ทธ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ฏ๋ก ๊ฐ๋ ์ฑ์ด ์ข์ ๋ฐ์ดํฐ ํ๋ณ์ด ์ฌ์
โ JSON(JavaScript Object Notation)
'ํค, ๊ฐ' ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ์ค๋ธ์ ํธ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ๊ฐ๋ฐฉํ ํ์ค ํฌ๋งท
→ json ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒดํํ
๋ฐ๋ณต๋๋ ํ๊ทธ ๊ตฌ์กฐ๋ฅผ ์ค์ผ ์ ์์ด์ ์ฉ๋์ด ์๋ค (XML์ ๋นํด)
AJAX ๋น๋๊ธฐํต์ ํ์ค๋ฐ์ดํฐ๋ก JSON ์ฌ์ฉ
๐ Ajax๋ก api ๊ฐ์ ธ์ค๊ธฐ
Ajax๋ ์ ์ด์ฟผ๋ฆฌ๋ก ์ ๊ทผํ์ง ์์ผ๋ฉด ์ฝ๋๊ฐ ๋๋ฌด ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์ ์ ์ด์ฟผ๋ฆฌ๋ก ์ฌ์ฉ
API(application programming interface, ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค)
์์ฉ ํ๋ก๊ทธ๋จ์์ ์๋ก ๋ค๋ฅธ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ํธ์์ฉํ ์ ์๋๋ก ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค. API๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ ์์คํ , ํ๋ซํผ ๋๋ ์ธ์ด ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ์น API๋ ์น ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ํธ์์ฉ์ ์ฉ์ดํ๊ฒ ํจ. ์๋ฅผ๋ค์ด, ํ์ด์ค๋ถ API๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ํ์ด์ค๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์์. ๋ํ, ๊ตฌ๊ธ ์ง๋ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์น์ฌ์ดํธ์์ Google ์ง๋๋ฅผ ์ฝ๊ฒ ํตํฉํ ์ ์์.
๏ผ ์ธํฐํ์ด์ค(Interface) : ์๋ก ๋ค๋ฅธ ๋ ๋์์ด ์ํธ์์ฉํ ์ ์๋๋ก ์ค๊ฐ์์ ์ฐ๊ฒฐํด์ฃผ๋ ์ฐ๊ฒฐ๊ณ ๋ฆฌ
// ajax -> ๋น๋๊ธฐํต์ ๋ฐฉ๋ฒ
// j์ฟผ๋ฆฌ์ ์ ๊ทผ -> $.
// ajax ๋ฉ์๋ ์ฌ์ฉ -> ajax()
// ๋ฐ์ดํฐ๋ JSON ํํ๋ก -> {key:value, ~}
let movieUrl = 'http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20230501';
const getAPI = ()=>{
$.ajax({
// ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๊ฑด์ง
url : movieUrl,
// ์ด๋ค ๋ฐฉ์์ผ๋ก ํต์ ํ ๊ฑด์ง
type : 'get',
// ํต์ ์ฑ๊ณต ์ ์คํ ๋ก์ง
success : (response)=>{
// alert('ํต์ ์ฑ๊ณต!')
// ์์ -> rank
// ์ํ์ ๋ชฉ -> movieNm
// ๊ฐ๋ด์ผ -> openDt
let movieList = response.boxOfficeResult.dailyBoxOfficeList;
// ํ
์ด๋ธ์ด ์ถ๋ ฅ๋ ๊ณต๊ฐ์ธ container์ ๋ณด๋ด์ค ์ฝ๋๋ฅผ ๋์ ํด์ ์์ฑํด์ค ๋ค์ ๋ง์ง๋ง์ ๋ฃ์ด์ฃผ์!
let tableFoam = `
<table>
<tr>
<th>์์</td>
<th>์ํ์ ๋ชฉ</td>
<th>๊ฐ๋ด์ผ</td>
</tr>
`;
for(let i of movieList){
tableFoam += `
<tr>
<td>${i.rank}</td>
<td>${i.movieNm}</td>
<td>${i.openDt}</td>
</tr>`
}
tableFoam += `
</table>
`;
$('.container').html(tableFoam);
},
// ํต์ ์คํจ ์ ์คํ ๋ก์ง
error : ()=>{
alert('ํต์ ์คํจ!');
}
})
}
โ API Url ๊ฐ์ ธ์ค๊ธฐ
'full stack > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
javascript CallBack ํจ์ & jQuery (2023.05.03) (0) | 2023.05.03 |
---|---|
javascript DOM ์์์ ์ ํ ๋ฐ input, style, img ๋ณ๊ฒฝ (2023.05.02) (0) | 2023.05.02 |
javascript DOM (2023.05.01) (0) | 2023.05.01 |
javascript ๊ฐ์ฒด(Object) (2023.04.28) (1) | 2023.04.29 |
javascript ๋ฐฐ์ด ์ค์ต, ํจ์ (2023.04.27) (0) | 2023.04.27 |