AJAX
์น๋ธ๋ผ์ฐ์ ์์ javascript๋ฅผ ์ด์ฉํด ์น์๋ฒ์ ์ ์, ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
ํ์์ง ๋ด์ ์ ๋ณด๋ค์ ๋ถ๋ถ์ ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ธฐ์
ํ์ํ ์ ๋ณด๋ง์ ๋ถ๋ถ์ ์ผ๋ก ์ ๊ตํ๊ฒ ๊ฐ์ ธ์ค๋ ๊ธฐ์
ํ์ํ ๋ถ๋ถ๋ง ๋ถ๋ถ์ ์ผ๋ก ์นํ์ด์ง๋ฅผ ๋ก๋ฉํ ์ ์์ด ์์ ์ ์ฝ ๊ฐ๋ฅ
๊ทธ์ค ์ต์ ์ธ,
fetch API
๋จ๊ณ๋ณ๋ก ๋ฐฐ์๋ณด๊ธฐ step by step๐งฆ
fetch('javascript')
ํด๋ผ์ด์ธํธ -> ์๋ฒ
์น๋ธ๋ผ์ฐ์ ! 'javascript'๋ผ๋ ํ์ผ์ ์๋ฒ์๊ฒ ์๋ตํด์ค
fuunction callbackme(){
}
fetch('html').then(callbackme);
์๋ฒ๊ฐ ์๋ตํ ๋ ๊น์ง ๋ค๋ฅธ ์ผ์ ํ ์ ์๋๋ก then์ ์ฌ์ฉ
'html' ํ์ผ์ ์๋ฒ์๊ฒ ์๋ตํด์ฃผ๊ณ ์๋ต์ด ๋๋๋ฉด callbackme๋ผ๋ ํจ์๋ฅผ ์คํ์์ผ
function callbackme(){
console.log('response end');
}
fetch('html').then(callbackme);
console.log(1);
console.log(2);
clonsole ์ถ๋ ฅ : 1 >2 > response end
-> ๋ณดํต์ callback ํจ์์ฒ๋ผ ์ด๋ฆ์ ์ ํ์ง ์๊ณ ์ต๋ช ํจ์๋ฅผ ์ฌ์ฉ
callbackme ๋ฅผ ๋ฐ๊พธ๋ฉด ์ด๋ฐ ๋ชจ์์ด ๋๋๋ฐ ์ด๊ฑธ fetch.then( _______) callback ํจ์ ์๋ฆฌ์ ๋ฃ์ด์ฃผ๋ฉด
callbackme = function(){
console.log('response end');
}
์ด๊ฒ์ callbackme ์๋ฆฌ์ ๋ฃ์ด์ฃผ๋ฉด ์ต๋ช ํจ์ํ ๋จ
response
fetch('css').then( function(response){
console.log(response);
});
fetch('css').then( function(response){
console.log(response.status);
if(response.status=='404'){
alert('Not found')
}
});
fetch๋ฅผ ํตํด ์์ฒญํ์ ๋ ์น์๋ฒ๊ฐ ์๋ตํ ๊ฒฐ๊ณผ๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด
๊ทธ ์์ ์ฌ๋ฌ๊ฐ์ง ์์ฑ์ด ์์ (ex status)
์์ฑ์ ํ์ฉํ์ฌ ์๋ฌ ์ ์๋ ์ฒ๋ฆฌ ๊ฐ๋ฅ
fetch(name).then(function(response){
response.text().then(function(text){
document.querySelector('article').innerHTML=text;
})
})
response์ค text() ์์ฑ์ ๊ณ ๋ฅธ ํ
๊ทธ ์์ฑ์ ์ด ํ์ผ์ 'article' ์์์ HTML ๋ก ๋ฃ๊ธฐ
ํจ์ํ ํ์ฌ ๊น๋ํ ์ฝ๋ ๊ฐ๋ฅ!
function fetchPage(name){
fetch(name).then(function(response){
response.text().then(function(text){
document.querySelector('article').innerHTML=text;
})
})
}
<li><a onclick = "fetchPage('html')">HTML</a></li>
HTML ๋ฆฌ์คํธ์์๋ฅผ ํด๋ฆญํ๋ฉด, HTML์ 'article'๊ตฌ๊ฐ์ ์๋ต๋ฐ์ ์๋ฃ ๋ฃ๊ธฐ
๐WOW ์์ฃผ ๊ฐ๋จํ fetch๋์์ ์ฑ๊ณตํ๋ค
Hash
if (location.hash) {
console.log(location.hash.substr(1));
}
else {
}
๋ฐ์ดํฐ์ ๋ก์ง ์ ๊ตฌ๋ถํ ์ ์์ด์ผ ํ๋ค.
๋ฐ์ดํฐ: ๋ฐ๋ ์ ์๋ ์ฑ์ง
๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ๋ aplication์ ์ํฅ์ด ์๋๋ก ์ค๊ณ๊ฐ ๊ฐ๋ฅํจ
nav ์ธ๊ตฌ๊ฐ์ ๋น์๋๊ณ
'list' ํ์ผ์ HTML ์ id๊ฐ nav์ธ ๊ตฌ๊ฐ์ ๋ฃ๊ธฐ
<ol id="nav">
</ol>
fetch('list').then(function(response){
response.text().then(function(text){
document.querySelector('#nav').innerHTML=text;
})
})
๊ทธ๋ ๋ด ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค๋ ๋ฐ์ดํฐ, ๋ง ๋ฃ์ด์ผ ํ๋๋ฐ ํ์ฌ list ํ์ผ์
<li><a href="#!html" onclick = "fetchPage('html')">HTML</a></li>
<li><a href="#!css" onclick= "fetchPage('css')">CSS</a></li>
<li><a href="#!javscript" onclick="fetchPage('javascript')">JavaScript</a></li>
์ด๋ ๊ฒ ๊ตฌ์ฑ๋์ด ์์.
๋ฐ์ดํฐ๊ฐ rawํํ๋ก ๋ค์ด๊ฐ๋ ํํ์ ์๋ง๊ฒ ๋ณํ์ด ๊ฐ๋ฅํด์ผ ํจ!
fetch('list').then(function(response){
response.text().then(function(text){
console.log(text); // html,css,javascript
var items = text.split(',');
var i=0;
var tags='';
while(i<items.length){
var item = items[i];
console.log(item); // ex) javascript
//item ๊ฐ ๊ธ์์ ์๋ค ๊ณต๋ฐฑ ์ ๊ฑฐ
item=item.trim();
var tag= '<li><a href="#!'+item+'"onclick="fetchPage(\''+item+'\')">'+item+'</a></li>';
tags+=tag;
console.log(tag);
i+=1;
}
console.log(items);
document.querySelector('#nav').innerHTML=tags;
})
});
์ด๋ ๊ฒ ์ฌ์ฉ์๋ list ๋ผ๋ ํ์ผ์ ๋ฐ์ดํฐ๋ง ๋ฃ์ด์ฃผ๋ฉด
text= html, css, javascript ๋ฅผ
items = [html, css, javascript] ๋ฐฐ์ด๋ก ๋ง๋ค์ด
item = html ( ๋ฐฐ์ด ๋ด ๋ด์ฉ ๊ฐ๊ฐ )
HTML ๊ตฌ๋ฌธ์ผ๋ก ๋ง๋ค์ด
tags = <li><a href="#!html"onclick="fetchPage('html')">html</a></li> <li~~~
#nav ๋ถ๋ถ์ ๋ฃ์ด์ฃผ์๋ค .
๊ทธ๋ฌ๋ฉด list ์ ๋ฐ์ดํฐ๋ฅผ html๋ก ๊ตฌํ ์๋ฃ!
์ด์ฒ๋ผ ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ๋ก ๋๋๊ณ ๊ตฌํ์ ๊ตฌํ์ผ๋ก ๋๋๋ฉด
๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ด๋ application์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ
โ application์ ์ฅ: ์ฌ์ฉ์๋ค์ด ์ฝ๋๋ฅผ ๋ง์๋๋ก ์์ ํ๋ฉฐ ์๊ธธ ์ฌ๊ณ ๋ฐฉ์ง
โ ์ปจํ ์ธ ์ ๋ ฅ์ ์ฅ: ์ ๋ ฅ ๊ณต๊ฐ, ๋ฐฉ๋ฒ์ ๋ํด ์์ ๋ก์ธ ์ ์์
์ฐธ๊ณ ์์
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript ํ๋กํ ํ์ (prototype) ์ดํด (0) | 2021.03.10 |
---|---|
[JavaScript] Class ์ ์์ (0) | 2021.03.10 |
์๋ฐ์คํฌ๋ฆฝํธ์ Promise()๋ก callback์ง์ฅ ๋ฒ์ด๋๊ธฐ (0) | 2021.02.25 |
Javascript JSON.parse(), JSON.stringify() ์ฌ์ฉํ๋๋ฒ (0) | 2021.02.23 |
Node.JS express๋ก ์๋ฒ ๊ตฌ์ฑํ๊ธฐ (5) | 2021.02.23 |
๋๊ธ