๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

javascript ๋™์ ์ด๋ฒคํŠธ, ๋น„๋™๊ธฐํ†ต์‹  ajax (2023.05.04) ๋ณธ๋ฌธ

full stack/JavaScript

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 ๊ฐ€์ ธ์˜ค๊ธฐ