์ƒˆ์†Œ์‹

Languages/Java Script

[Js]๋„คํŠธ์›Œํฌ ํ†ต์‹  | Ajax

  • -
๋ฐ˜์‘ํ˜•

๋ชจ๋“  ํฌ์ŠคํŒ…์€ ์ธํ”„๋Ÿฐ [์ƒํ™œ์ฝ”๋”ฉ] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ•์˜์˜ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ

์ถœ์ฒ˜๋Š” ์•„๋ž˜์˜ ์ฃผ์†Œ๋กœ "egoing Lee"๋‹˜์˜ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค. 

์ƒ์—…์ ์ธ ์˜๋„๊ฐ€ ์•„๋‹Œ ๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•ด๋†“๋Š” ๋ชฉ์ ์œผ๋กœ ํฌ์ŠคํŒ… ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

www.inflearn.com/course/javascript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%95%EC%A2%8C#

 

์›น๋ธŒ๋ผ์šฐ์ € Javascript (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ) - ์ธํ”„๋Ÿฐ

์ƒํ™œ์ฝ”๋”ฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ•์ขŒ ์ž…๋‹ˆ๋‹ค. ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ณต๋ถ€ํ•ด ๋ด…๋‹ˆ๋‹ค. ์ดˆ๊ธ‰ ์›น ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด JavaScript ์˜จ๋ผ์ธ ๊ฐ•์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ•์ขŒ

www.inflearn.com


๋„คํŠธ์›Œํฌ ํ†ต์‹ 

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ํ˜•์‹์œผ๋กœ์„œ JSON๊ณผ ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋“œ ์—†์ด ์›นํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” Ajax๋Š” ์›น์—ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์„œ ํ•™์Šตํ•ด์•ผ ํ•œ๋‹ค.

 

Ajax

๋”๋ณด๊ธฐ

์›น๋ธŒ๋ผ์šฐ์ €๋Š” ๋Œ€๋‹จํžˆ ์ •์ ์ธ ์‹œ์Šคํ…œ์ด์—ˆ๋‹ค. ๋‚ด์šฉ์ด ๋ฐ”๋€Œ๋ฉด ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•ด์„œ ๋‚ด์šฉ์„ ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ๋‹ค. ์ด๊ฒƒ์€ ์›น์ด ์ „์ž ๋ฌธ์„œ๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๊ณ ์•ˆ๋œ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํ•˜๊ฒŒ ์ƒ๊ฐ ๋˜์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค Ajax ๊ฐœ๋…์ด ๋„์ž…๋˜๋ฉด์„œ ๋ชจ๋“  ๊ฒƒ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค. Ajax๋Š” ์›น๋ธŒ๋ผ์šฐ์ €์™€ ์›น์„œ๋ฒ„๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ์›นํŽ˜์ด์ง€์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ๋ฐ˜์˜ํ•จ์œผ๋กœ์จ ์›นํŽ˜์ด์ง€์˜ ๋กœ๋”ฉ ์—†์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. 

Ajax๋Š” Asynchronous JavaScript and XML์˜ ์•ฝ์ž๋‹ค. ํ•œ๊ตญ์–ด๋กœ๋Š” ๋น„๋™๊ธฐ์  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ XML ์ •๋„๋กœ ์ง์—ญํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” API๊ฐ€ XMLHttpRequest์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๊ผญ XML์„ ์‚ฌ์šฉํ•ด์„œ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์‚ฌ์‹ค XML ๋ณด๋‹ค๋Š” JSON์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

IE5,6 ์—์„œ๋Š” XMLHttpRequest ๊ฐ์ฒด ๋Œ€์‹  ActiveXObject("Msxml2.XMLHTTP.6.0")์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค.


์˜ˆ์ „ ์›น๋ธŒ๋ผ์šฐ์ €๋Š” ์ •์ ์ธ ์‹œ์Šคํ…œ์ด๋ผ์„œ, ๋‚ด์šฉ์ด ๋ฐ”๋€Œ๋ฉด ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•ด์„œ ๋‚ด์šฉ์„ ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ๋‹ค.

์›น์ด ์ „์ž ๋ฌธ์„œ๋ฅผ ์—ผ๋‘ํ•ด๋‘๊ณ  ๊ณ ์•ˆ๋œ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

Ajax ๊ฐœ๋…์ด ๋„์ž…๋˜๋ฉด์„œ ๋ชจ๋“  ๊ฒƒ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค.

Ajax๋Š” ์›น๋ธŒ๋ผ์šฐ์ €์™€ ์›น์„œ๋ฒ„๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ์›นํŽ˜์ด์ง€์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜์—ฌ, ์›นํŽ˜์ด์ง€์—์„œ ๋กœ๋”ฉ ์—†์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. 


 Ajax 

Ajax๋Š” Asynchronous JavaScript and XML์˜ ์•ฝ์ž๋‹ค.

ํ•œ๊ตญ์–ด๋กœ๋Š” ๋น„๋™๊ธฐ์  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ XML ์ •๋„๋กœ ์ง์—ญํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

โ€ป ์ฐธ๊ณ 

๋น„๋™๊ธฐ์  : ์–ด๋– ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ๋กœ๋”ฉ๋˜๊ณ  ์žˆ์„ ๋•Œ ๋‹ค๋ฅธ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋™๊ธฐ์  : ์–ด๋– ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ๋กœ๋”ฉ๋˜๊ณ  ์žˆ์„ ๋•Œ ๋‹ค๋ฅธ ์ผ์„ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.


์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” API๊ฐ€ XMLHttpRequest์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ๊ผญ XML์„ ์‚ฌ์šฉํ•ด์„œ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์‚ฌ์‹ค XML ๋ณด๋‹ค๋Š” JSON์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

IE5,6 ์—์„œ๋Š” XMLHttpRequest ๊ฐ์ฒด ๋Œ€์‹  ActiveXObject("Msxml2.XMLHTTP.6.0")์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


 XMLHttpRequest 

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด์„œ ์•Œ์•„๋ณด์ž. ( ํ•ด๋‹น ์˜ˆ์ œ๋Š” ์„œ๋ฒ„ ํ™˜๊ฒฝ์ด ๊ตฌ์ถ•๋˜์–ด์žˆ์–ด์•ผ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. )


time.php

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ˜„์žฌ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

<?php
    $d1 = new DateTime;
    $d1->setTimezone(new DateTimezone("asia/seoul"));
    echo $d1->format('H:i:s');
?>

demo1.html

time.php์— ์ ‘์†ํ•ด์„œ ํ˜„์žฌ ์‹œ๊ฐ„์€ ํŽ˜์ด์ง€์— ํ‘œ์‹œํ•œ๋‹ค.

<p>time : <span id="time"></span></p>
<input type="button" id="execute" value="execute" />
<script>
    document.querySelector('input').addEventListener('click', function(event){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', './time.php'); //openํ•˜๊ณ  sendํ•ด์•ผ๋œ๋‹ค. GET๋ฐฉ์‹
        xhr.onreadystatechange = function(){
            if(xhr.readyState === 4 && xhr.status === 200){
                document.querySelector('#time').innerHTML = xhr.responseText;
            }
        }
        xhr.send(); 
    }); 
</script> 

์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด์ž.

1. XMLHttpRequest ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

var xhr = new XMLHttpRequest();

2. ์ ‘์†ํ•˜๋ ค๋Š” ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” form ํƒœ๊ทธ์˜ method์— ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ GET/POST ๋ฐฉ์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ์ ‘์†ํ•˜๊ณ ์ž ํ•˜๋Š” ์„œ๋ฒ„์ชฝ ๋ฆฌ์†Œ์Šค์˜ ์ฃผ์†Œ๋กœ, form ํƒœ๊ทธ์˜ action์— ํ•ด๋‹นํ•œ๋‹ค.

xhr.open('GET', './time.php');

3. ํ˜„์žฌ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ํ˜„์žฌ์‹œ๊ฐ„์„ ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋”ฉ ์—†์ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

onreadystatechange ์ด๋ฒคํŠธ๋Š” ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ๋๋‚ฌ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค.

 

readyState๋Š” ํ†ต์‹ ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

4๋Š” ๋ชจ๋“  ํ†ต์‹ ์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ, status๋Š” HTTP ํ†ต์‹ ์˜ ๊ฒฐ๊ณผ๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ 200์€ ํ†ต์‹ ์ด ์„ฑ๊ณตํ–ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

 

responseText ํ”„๋กœํผํ‹ฐ๋Š” ์„œ๋ฒ„์—์„œ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ์ด๊ฒƒ์„ id๊ฐ€ time ์—˜๋ฆฌ๋จผํŠธ์˜ ํ•˜์œ„๋กœ ์‚ฝ์ž…ํ•œ๋‹ค.

xhr.onreadystatechange = function(){
    if(xhr.readyState === 4 && xhr.status === 200){
        document.querySelector('#time').innerHTML = xhr.responseText;
    }
}

 POST ๋ฐฉ์‹ 

time2.php

์•„๋ž˜๋Š” Ajax๋ฅผ ์ด์šฉํ•ด์„œ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ํ˜„์žฌ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ์„œ๋ฒ„์ชฝ ๊ตฌํ˜„์ด๋‹ค. 

<?php
    $d1 = new DateTime;
    $d1->setTimezone(new DateTimezone($_POST['timezone']));
    echo $d1->format($_POST['format']);
?>

 

demo2.html

์•„๋ž˜ ์˜ˆ์ œ๋Š” ์‹œ๊ฐ„๋Œ€์™€ ์‹œ๊ฐ„์˜ ์ถœ๋ ฅ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ์˜ˆ์ œ๋‹ค. 

<p>time : <span id="time"></span></p>
<select id="timezone">
    <option value="Asia/Seoul">asia/seoul</option>
    <option value="America/New_York">America/New_York</option>
</select>
<select id="format">
    <option value="Y-m-d H:i:s">Y-m-d H:i:s</option>
    <option value="Y-m-d">Y-m-d</option>
</select>
<input type="button" id="execute" value="execute" />
<script>
document.querySelector('input').addEventListener('click', function(event){
    var xhr = new XMLHttpRequest();
    xhr.open('POST', './time2.php');
    xhr.onreadystatechange = function(){
        document.querySelector('#time').innerHTML = xhr.responseText;
    }
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var data = '';
    data += 'timezone='+document.getElementById('timezone').value;
    data += '&format='+document.getElementById('format').value;
    xhr.send(data); 
});
</script> 

์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

๋ฐ์ดํ„ฐ ์ „์†ก๋ฐฉ๋ฒ•์„ GET์—์„œ POST๋กœ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค. 

xhr.open('POST', './time2.php');

 

์„œ๋ฒ„๋กœ ์ „์†กํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํ˜•์‹(MIME)์„ ์ง€์ •ํ•œ๋‹ค. 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ์ „์†กํ•˜๋Š” ์ •๋ณด๊ฐ€ html์— form์„ ํ†ตํ•ด์„œ ์ „์†กํ•œ ์ •๋ณด๋กœ ์ธ์‹๋œ๋‹ค.

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

 

์„œ๋ฒ„๋กœ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ ํ˜•์‹์— ๋งž๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ด๋ฆ„=๊ฐ’&์ด๋ฆ„=๊ฐ’... ์˜ ํ˜•์‹์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค. 

์ฆ‰, ์˜ˆ๋ฅผ ๋“ค์–ด timezone=Asia/Seoul & format = Y-m-d์™€ ๊ฐ™์ด ํ˜•์‹์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.

var data = '';
data += 'timezone='+document.getElementById('timezone').value;
data += '&format='+document.getElementById('format').value;

 

send ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๋กœ ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

xhr.send(data);
๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.