XMLHttpRequest
XMLHttpRequestλ λΈλΌμ°μ μμ μ 곡νλ κ°μ²΄λ‘, λΉλκΈ°μ μΌλ‘ μλ²μ ν΅μ ν μ μλλ‘ λμμ€λλ€. μ΄κΈ°μ μ£Όλ‘ μ¬μ©λμμΌλ, μ½λ°± μ§ν₯μ μ΄κ³ 볡μ‘ν API κ΅¬μ‘°λ‘ μΈν΄ κ°λ
μ±μ΄ λ¨μ΄μ§λ λ¨μ μ΄ μμ΅λλ€.
λΈλΌμ°μ | node | |
μ€ν μ¬λΆ |
λΈλΌμ°μ μ κ°μ²΄μ΄κΈ° λλ¬Έμ, node λ°νμ νκ²½μμλ μ€ν λΆκ°
μ£Όμ μμ± λ° λ©μλ
μμ± λλ λ©μλ | μ€λͺ
|
onreadystatechange | μλ΅ μνκ° λ³κ²½λ λ νΈμΆλλ μ΄λ²€νΈ νΈλ€λ¬. |
readyState | νμ¬ μμ² μνλ₯Ό λνλ΄λ μμ± (0~4κΉμ§μ κ°).
- UNSENT (0) : open() νΈμΆ μ
- OPENED (1) : open() νΈμΆλ μν
- HEADERS_RECEIVED (2) : μλ΅ ν€λλ₯Ό μμ
- LOADING (3) : μλ΅ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ μλ μν
- DONE (4) : μμ² μλ£ |
status | μλ΅μ HTTP μν μ½λλ₯Ό λνλ΄λ μμ±. |
statusText | HTTP μν μ½λμ λμνλ ν
μ€νΈλ₯Ό λνλ΄λ μμ±. |
response | μλ² μλ΅ λ°μ΄ν°λ₯Ό λνλ΄λ μμ±. |
responseText | μλ² μλ΅ λ°μ΄ν°λ₯Ό λ¬Έμμ΄λ‘ λνλ΄λ μμ±. |
responseType | μλ² μλ΅ λ°μ΄ν°μ νμμ λνλ΄λ μμ±. |
open(method, url, async, user, password) | μμ²μ μ΄κΈ°ννκ³ μλ²μ λ³΄λΌ μ€λΉλ₯Ό ν©λλ€. |
setRequestHeader(header, value) | HTTP ν€λλ₯Ό μ€μ νλ λ©μλ. |
send(data) | μλ²μ μμ²μ 보λ
λλ€. |
abort() | νμ¬μ λΉλκΈ° μμ²μ μ·¨μν©λλ€. |
XMLHttpRequest GET μμ²
// XMLHttpRequest κ°μ²΄ μμ±
var xhr = new XMLHttpRequest();
// μ΄λ²€νΈ νΈλ€λ¬ λ±λ‘
xhr.onreadystatechange = function() {
// xhr.readyState : ν΄λΌμ΄μΈνΈμ μ€λΉ μν λ³μ
// - UNSENT : open() νΈμΆ μ
// - OPENED : open() νΈμΆλ μν
// - HEADERS_RECEIVED : μλ΅ ν€λλ₯Ό μμ
// - LOADING : μλ΅ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ μλ μν
// - DONE : μμ² μλ£
if (xhr.readyState === XMLHttpRequest.DONE) {
// xhr.status : μλ΅ μν μ½λ
// ex) 200, 404, 500
// μμ²μ΄ μλ£λλ©΄ μ€νλλ μ½λ
if (xhr.status === 200) {
// μ±κ³΅μ μΌλ‘ μλ΅ λ°μμ λμ μ½λ
console.log(xhr.responseText);
} else {
// μ€λ₯ μ²λ¦¬ μ½λ
console.error('Request failed with status:', xhr.status);
}
}
};
var url = 'https://httpbin.org/get'
// μμ² μ΄κΈ°(μ€μ )
// xhr.open("μμ²λ©μλ", url, λΉλκΈ°μ¬λΆ)
xhr.open('GET', url, true);
// μμ² μ μ‘
xhr.send();
JavaScript
볡μ¬
μ€νκ²°κ³Ό
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
"Host": "httpbin.org",
"Origin": "http://127.0.0.1:5500",
"Referer": "http://127.0.0.1:5500/",
"Sec-Ch-Ua": "\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"",
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "\"Windows\"",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "cross-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-655b60e2-57ef9dad6ab79a802f252116"
},
"origin": "xxx.xxx.xxx.xxx",
"url": "https://httpbin.org/get"
}
JavaScript
볡μ¬
XMLHttpRequest POST μμ²
// XMLHttpRequest κ°μ²΄ μμ±
var xhr = new XMLHttpRequest();
// μ΄λ²€νΈ νΈλ€λ¬ λ±λ‘
xhr.onreadystatechange = function() {
// xhr.readyState : ν΄λΌμ΄μΈνΈμ μ€λΉ μν λ³μ
// - UNSENT : open() νΈμΆ μ
// - OPENED : open() νΈμΆλ μν
// - HEADERS_RECEIVED : μλ΅ ν€λλ₯Ό μμ
// - LOADING : μλ΅ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ μλ μν
// - DONE : μμ² μλ£
if (xhr.readyState === XMLHttpRequest.DONE) {
// xhr.status : μλ΅ μν μ½λ
// ex) 200, 404, 500
// μμ²μ΄ μλ£λλ©΄ μ€νλλ μ½λ
if (xhr.status === 200) {
// μ±κ³΅μ μΌλ‘ μλ΅ λ°μμ λμ μ½λ
console.log(xhr.responseText);
} else {
// μ€λ₯ μ²λ¦¬ μ½λ
console.error('Request failed with status:', xhr.status);
}
}
};
var url = 'https://httpbin.org/post'
var data = {
name : 'aloha',
age : 20
}
// μμ² μ΄κΈ°(μ€μ )
// xhr.open("μμ²λ©μλ", url, λΉλκΈ°μ¬λΆ)
xhr.open('POST', url, true);
// ν€λ μ€μ
xhr.setRequestHeader('Content-Type', 'application/json')
// μμ² μ μ‘
xhr.send(JSON.stringify(data));
JavaScript
볡μ¬
μ€ν κ²°κ³Ό
{
"args": {},
"data": "{\"name\":\"aloha\",\"age\":20}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
"Content-Length": "25",
"Content-Type": "application/json",
"Host": "httpbin.org",
"Origin": "http://127.0.0.1:5500",
"Referer": "http://127.0.0.1:5500/",
"Sec-Ch-Ua": "\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"",
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "\"Windows\"",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "cross-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-655b612b-0a60ebfc7d3c9d996882398d"
},
"json": {
"age": 20,
"name": "aloha"
},
"origin": "xxx.xxx.xxx.xxx",
"url": "https://httpbin.org/post"
}
JavaScript
볡μ¬
μ¬μ© λͺ©μ
β’
λΉλκΈ°μ μΌλ‘ μλ²μ ν΅μ νμ¬ λ°μ΄ν°λ₯Ό μμ²νκ³ μλ΅μ μ²λ¦¬ν©λλ€.
β’
λμ μΌλ‘ νμ΄μ§μ μΌλΆλ₯Ό μ
λ°μ΄νΈνκ±°λ λ°μ΄ν°λ₯Ό λ‘λνμ¬ νμ΄μ§λ₯Ό μλ‘ κ³ μΉμ§ μκ³ λ³κ²½ν©λλ€.
β’
μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό λ°μμμ λμ μΌλ‘ μΉ νμ΄μ§μ λ΄μ©μ κ°±μ ν©λλ€.
β’
μΉ μ ν리μΌμ΄μ
μμ μ¬μ©μμ μνΈ μμ©νλ©΄μ λ°±κ·ΈλΌμ΄λμμ μλ²μ λ°μ΄ν°λ₯Ό κ΅νν©λλ€.
μ΄λ¬ν νΉμ§μΌλ‘ XMLHttpRequestλ ν΄λΌμ΄μΈνΈ μΈ‘μμ μλ²μμ ν΅μ μ ν¨κ³Όμ μΌλ‘ μννλλ° μ¬μ©λ©λλ€. κ·Έλ¬λ νλμ μΉ κ°λ°μμλ Fetch APIμ κ°μ μλ‘μ΄ κΈ°μ μ΄ λμ€λ©΄μ λμ± κ°λ ₯νκ³ μ¬μ©νκΈ° μ¬μ΄ λμμ΄ λκ³ μμ΅λλ€.