[Js]๋คํธ์ํฌ ํต์ | Ajax
- -
๋ชจ๋ ํฌ์คํ ์ ์ธํ๋ฐ [์ํ์ฝ๋ฉ] ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์์ ๋ด์ฉ์ ๋ด๊ณ ์์ผ๋ฉฐ
์ถ์ฒ๋ ์๋์ ์ฃผ์๋ก "egoing Lee"๋์ ์๋ฃ์ ๋๋ค.
์์ ์ ์ธ ์๋๊ฐ ์๋ ๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํด๋๋ ๋ชฉ์ ์ผ๋ก ํฌ์คํ ํ ๊ฒ์ ๋๋ค.
๋คํธ์ํฌ ํต์
์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์์ผ๋ก์ 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);
'Languages > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Js] jQuery Ajax | javascript (0) | 2021.02.10 |
---|---|
[Js] JSON | Ajax์ JSON (0) | 2021.02.10 |
[Js] ๋ง์ฐ์ค | jQuery ์ด๋ฒคํธ | on ApI ์ฌ์ฉ๋ฒ (0) | 2021.02.10 |
๐๐ป[Js] ๊ธฐ๋ณธ๋์์ ์ทจ์ | ํผ | ๋ฌธ์๋ก๋ฉ (0) | 2021.02.10 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค