[JavaScript] Ajax
Ajaxλ?
Ajax(Asynchronous JavaScript and XML)λ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ λΈλΌμ°μ κ° μλ²μκ² λΉλκΈ° λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μμ²νκ³ , μλ²κ° μλ΅ν λ°μ΄ν°λ₯Ό μμ νμ¬ μΉνμ΄μ§λ₯Ό λμ μΌλ‘ κ°±μ νλ νλ‘κ·Έλλ° λ°©μμ λ§ν©λλ€.
- λΈλΌμ°μ μμ μ 곡νλ Web APIμΈ XMLHttpRequest κ°μ²΄λ₯Ό κΈ°λ°μΌλ‘ λμ
- XMLHttpRequestλ HTTP λΉλκΈ° ν΅μ μ μν λ©μλμ νλ‘νΌν°λ₯Ό μ 곡
μ΄μ μ μΉνμ΄μ§λ μμ ν HTMLμ μλ²λ‘λΆν° μ μ‘λ°μ μΉνμ΄μ§ μ 체λ₯Ό μ²μλΆν° λ€μ λ λλ§ νλ λ°©μμΌλ‘, λ³κ²½ν νμκ° μλ λΆλΆκΉμ§ λ€μ λ λλ§λλ λ¨μ μ΄ μμμ΅λλ€. νμ§λ§ Ajaxμ λ±μ₯μ μ΄μ μ μ ν΅μ μΈ ν¨λ¬λ€μμ νκΈ°μ μΌλ‘ μ ννμ΅λλ€.
- μλ²λ‘λΆν° μΉνμ΄μ§μ λ³κ²½μ νμν λ°μ΄ν°λ§ μ μ‘λ°μ λΆνμν λ°μ΄ν° ν΅μ λ°μ X
- λ³κ²½ν νμκ° μλ λΆλΆλ§ νμ μ μΌλ‘ λ λλ§ν΄ νλ©΄μ΄ μκ°μ μΌλ‘ κΉλ°μ΄λ νμμ΄ λ°μ X
- ν΄λΌμ΄μΈνΈμ μλ²μμ ν΅μ μ΄ λΉλκΈ° λ°©μμΌλ‘ λμν΄ μλ²μμ μμ²μ λ³΄λΈ μ΄ν λΈλ‘νΉμ΄ λ°μ X
- λΈλΌμ°μ μμλ λ°μ€ν¬ν± μ ν리μΌμ΄μ κ³Ό μ μ¬ν λΉ λ₯Έ νΌν¬λ¨Όμ€μ λΆλλ¬μ΄ νλ©΄ μ νμ΄ κ°λ₯
JSON
JSON(JavaScript Object Notation)μ ν΄λΌμ΄μΈνΈμ μλ² κ°μ HTTP ν΅μ μ μν ν μ€νΈ λ°μ΄ν° ν¬λ§·μΌλ‘, μλ°μ€ν¬λ¦½νΈμ μ’ μλμ§ μλ μΈμ΄ λ 립ν λ°μ΄ν° ν¬λ§·μ λλ€. λ°λΌμ λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μμ μ¬μ©ν μ μμ΅λλ€.
JSON νκΈ° λ°©μ
JSONμ μλ°μ€ν¬λ¦½νΈμ κ°μ²΄ 리ν°λ΄κ³Ό μ μ¬νκ² ν€μ κ°μΌλ‘ ꡬμ±λ μμν ν μ€νΈμ λλ€.
{
"name": "Lee",
"age": 20,
"alive": true,
"hobby": ["traveling", "tennis"]
}
- JSONμ ν€ : λ°λμ ν°λ°μ΄νλ‘ λ¬Άμ΄μΌ ν¨
- JSONμ κ° : κ°μ²΄ 리ν°λ΄κ³Ό κ°μ νκΈ°λ²μ κ·Έλλ‘ μ¬μ©ν μ μμ§λ§ λ¬Έμμ΄μ λ°λμ ν°λ°μ΄νλ‘ λ¬Άμ΄μΌ ν¨
JSON.stringify
μ§λ ¬ν(serializing)λ ν΄λΌμ΄μΈνΈκ° μλ²λ‘ κ°μ²΄λ₯Ό μ μ‘νκΈ° μν΄ κ°μ²΄λ₯Ό λ¬Έμμ΄ννλ κ²μ λλ€. μ΄λ, JSON.stringify
λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³νν©λλ€. λν, JSON.stringify λ©μλλ κ°μ²΄λΏλ§ μλλΌ λ°°μ΄λ JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³νν©λλ€.
// κ°μ²΄ λ³ν
const obj = {
name: 'Lee',
age: 20,
alive: true,
hobby: ['traveling', 'tennis']
};
// κ°μ²΄λ₯Ό JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³ννλ€.
const json = JSON.stringify(obj);
console.log(typeof json, json);
// string {"name":"Lee","age":20,"alive":true,"hobby":["traveling","tennis"]}
// κ°μ²΄λ₯Ό JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³ννλ©΄μ λ€μ¬μ°κΈ° νλ€.
const prettyJson = JSON.stringify(obj, null, 2);
console.log(typeof prettyJson, prettyJson);
/*
string {
"name": "Lee",
"age": 20,
"alive": true,
"hobby": [
"traveling",
"tennis"
]
}
*/
// replacer ν¨μ. κ°μ νμ
μ΄ Numberμ΄λ©΄ νν°λ§λμ΄ λ°νλμ§ μλλ€.
function filter(key, value) {
// undefined: λ°ννμ§ μμ
return typeof value === 'number' ? undefined : value;
}
// JSON.stringify λ©μλμ λ λ²μ§Έ μΈμλ‘ replacer ν¨μλ₯Ό μ λ¬νλ€.
const strFilteredObject = JSON.stringify(obj, filter, 2);
console.log(typeof strFilteredObject, strFilteredObject);
/*
string {
"name": "Lee",
"alive": true,
"hobby": [
"traveling",
"tennis"
]
}
*/
// λ°°μ΄ λ³ν
const todos = [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 3, content: 'Javascript', completed: false }
];
// λ°°μ΄μ JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³ννλ€.
const json = JSON.stringify(todos, null, 2);
console.log(typeof json, json);
/*
string [
{
"id": 1,
"content": "HTML",
"completed": false
},
{
"id": 2,
"content": "CSS",
"completed": true
},
{
"id": 3,
"content": "Javascript",
"completed": false
}
]
*/
JSON.parse
JSON.parse λ©μλλ JSON ν¬λ§·μ λ¬Έμμ΄μ κ°μ²΄λ‘ λ³νν©λλ€. μλ²λ‘λΆν° ν΄λΌμ΄μΈνΈμκ² μ μ‘λ JSON λ°μ΄ν°λ₯Ό
κ°μ²΄λ‘μ μ¬μ©νλ €λ©΄ JSON ν¬λ§·μ λ¬Έμμ΄μ κ°μ²΄νν΄μΌ νλλ° μ΄λ₯Ό μμ§λ ¬ν(deserializing)λΌκ³ ν©λλ€.
const obj = {
name: 'Lee',
age: 20,
alive: true,
hobby: ['traveling', 'tennis']
};
// κ°μ²΄λ₯Ό JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³ννλ€.
const json = JSON.stringify(obj);
// JSON ν¬λ§·μ λ¬Έμμ΄μ κ°μ²΄λ‘ λ³ννλ€.
const parsed = JSON.parse(json);
console.log(typeof parsed, parsed);
// object {name: "Lee", age: 20, alive: true, hobby: ["traveling", "tennis"]}
λ°°μ΄μ΄ JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³νλμ΄ μλ κ²½μ° JSON.parseλ λ¬Έμμ΄μ λ°°μ΄ κ°μ²΄λ‘ λ³νν©λλ€. μ΄λ, λ°°μ΄μ μμκ° κ°μ²΄μΈ κ²½μ° λ°°μ΄μ μμκΉμ§ κ°μ²΄λ₯Ό λ³νν©λλ€.
const todos = [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 3, content: 'Javascript', completed: false }
];
// λ°°μ΄μ JSON ν¬λ§·μ λ¬Έμμ΄λ‘ λ³ννλ€.
const json = JSON.stringify(todos);
// JSON ν¬λ§·μ λ¬Έμμ΄μ λ°°μ΄λ‘ λ³ννλ€. λ°°μ΄μ μμκΉμ§ κ°μ²΄λ‘ λ³νλλ€.
const parsed = JSON.parse(json);
console.log(typeof parsed, parsed);
/*
object [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 3, content: 'Javascript', completed: false }
]
*/
XMLHttpRequest
λΈλΌμ°μ λ μ£Όμμ°½μ΄λ HTMLμ form νκ·Έ λλ a νκ·Έλ₯Ό ν΅ν΄ HTTP μμ² μ μ‘ κΈ°λ₯μ κΈ°λ³Έ μ 곡νλλ°, μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ HTTP μμ²μ μ μ‘νλ €λ©΄ XMLHttpRequest κ°μ²΄λ₯Ό μ¬μ©ν©λλ€.
Web APIμΈ XMLHttpRequest κ°μ²΄λ HTTP μμ² μ μ‘κ³Ό HTTP μλ΅ μμ μ μν λ€μν λ©μλμ νλ‘νΌν°λ₯Ό μ 곡ν©λλ€.
XMLHttpRequest κ°μ²΄ μμ±
XMLHttpRequest κ°μ²΄λ XMLHttpRequest μμ±μ ν¨μλ₯Ό νΈμΆνμ¬ μμ±ν©λλ€. μ΄ κ°μ²΄λ λΈλΌμ°μ μμ μ 곡νλ Web APIμ΄λ―λ‘ λΈλΌμ°μ νκ²½μμλ§ μ μμ μΌλ‘ μ€νλ©λλ€.
// XMLHttpRequest κ°μ²΄ μμ±
const xhr = new XMLHttpRequest();
XMLHttpRequest κ°μ²΄μ νλ‘νΌν°μ λ©μλ
XMLHttpRequest κ°μ²΄μ λ€μν νλ‘νΌν°μ λ©μλ μ€ λνμ μΈ νλ‘νΌν°μ λ©μλλ λ€μκ³Ό κ°μ΅λλ€.
νλ‘ν νμ νλ‘νΌν°
νλ‘ν νμ νλ‘νΌν° | μ€λͺ |
readyState | HTTP μμ²μ νμ¬ μνλ₯Ό λνλ΄λ μ μ - UNSENT : 0 - OPENED : 1 - HEADERS_RECEIVED : 2 - LOADING : 3 - DONE : 4 |
status | HTTP μμ²μ λν μλ΅ μν(*HTTP μν μ½λ)λ₯Ό λνλ΄λ μ μ (ex. 200) |
statusText | HTTP μμ²μ λν μλ΅ λ©μμ§λ₯Ό νλλ΄λ λ¬Έμμ΄ (ex. "OK") |
responseType | HTTP μλ΅ νμ (ex. document, json, text, blob, arraybuffer) |
response | HTTP μμ²μ λν μλ΅ λͺΈμ²΄. responseTypeμ λ°λΌ νμ μ΄ λ€λ¦ |
responseText | μλ²κ° μ μ‘ν HTTP μμ²μ λν μλ΅ λ¬Έμμ΄ |
*HTTP μν μ½λ : https://j-su2.tistory.com/17?category=1016208
[λ€νΈμν¬] HTTPμ Methodμ μνμ½λ
HTTPλ? https://j-su2.tistory.com/16 [λ€νΈμν¬] HTTPμ HTTPS HTTPλ? Hyper Text Transfer Protocolμ μ½μλ‘, μΈν°λ·μμ ν μ΄ν°λ₯Ό μ£Όκ³ λ°μ μ μλ νλ‘ν μ½μ μλ―Έν©λλ€. μ¦, μΉ μλ²μ ν΄λΌμ΄μΈνΈ κ°μ..
j-su2.tistory.com
μ΄λ²€νΈ νΈλ€λ¬ νλ‘νΌν°
μ΄λ²€νΈ νΈλ€λ¬ νλ‘νΌν° | μ€λͺ |
onreadystatechange | readyState νλ‘νΌν° κ°μ΄ λ³κ²½λ κ²½μ° |
onloadstart | HTTP μμ²μ λν μλ΅μ λ°κΈ° μμν κ²½μ° |
onprogress | HTTP μμ²μ λν μλ΅μ λ°λ λμ€ μ£ΌκΈ°μ μΌλ‘ λ°μ |
onabort | abort λ©μλμ μν΄ HTTP μμ²μ΄ μ€λ¨λ κ²½μ° |
onerror | HTTP μμ²μ μλ¬κ° λ°μν κ²½μ° |
onload | HTTP μμ²μ΄ μ±κ³΅μ μΌλ‘ μλ£ν κ²½μ° |
ontimeout | HTTP μμ² μκ°μ΄ μ΄κ³Όν κ²½μ° |
onloadend | HTTP μμ²μ΄ μλ£ν κ²½μ°. HTTP μμ²μ΄ μ±κ³΅/μ€ν¨νλ©΄ λ°μ |
λ©μλ
λ©μλ | μ€λͺ |
open | HTTP μμ² μ΄κΈ°ν |
send | HTTP μμ² μ μ‘ |
abort | μ΄λ―Έ μ μ‘λ HTTP μμ² μ€λ¨ |
setRequestHeader | νΉμ HTTP μμ² ν€λμ κ°μ μ€μ |
getResponseHeader | νΉμ HTTP μμ² ν€λμ κ°μ λ¬Έμμ΄λ‘ λ³ν |
μ μ νλ‘νΌν°
μ μ νλ‘νΌν° | κ° | μ€λͺ |
UNSENT | 0 | open λ©μλ νΈμΆ μ΄μ |
OPENED | 1 | open λ©μλ νΈμΆ μ΄ν |
HEADERS_RECEIVED | 2 | send λ©μλ νΈμΆ μ΄ν |
LOADING | 3 | μλ² μλ΅ μ€(μλ΅ λ°μ΄ν° λ―Έμμ± μν) |
DONE | 4 | μλ² μλ΅ μλ£ |
HTTP μμ² μ μ‘
HTTP μμ²μ μ μ‘νλ κ²½μ°λ λ€μ μμλ₯Ό λ°λ¦ λλ€.
- XMLHttpRequest.prototype.open λ©μλλ‘ HTTP μμ²μ μ΄κΈ°ν
- νμμ λ°λΌ XMLHttpRequest.prototype.setRequstHeader λ©μλλ‘ νΉμ HTTP μμ²μ ν€λ κ°μ μ€μ
- XMLHttpRequest.prototype.send λ©μλλ‘ HTTP μμ²μ μ μ‘
// XMLHttpRequest κ°μ²΄ μμ±
const xhr = new XMLHttpRequest();
// HTTP μμ² μ΄κΈ°ν
xhr.open('GET', '/users');
// HTTP μμ² ν€λ μ€μ
// ν΄λΌμ΄μΈνΈκ° μλ²λ‘ μ μ‘ν λ°μ΄ν°μ MIME νμ
μ§μ : json
xhr.setRequestHeader('content-type', 'application/json');
// HTTP μμ² μ μ‘
xhr.send();
XMLHttpRequest.prototype.open
open λ©μλλ μλ²μ μ μ‘ν HTTP μμ²μ μ΄κΈ°νν©λλ€.
xhr.open(method, url[, async]);
λ§€κ°λ³μ | μ€λͺ |
method | HTTP μμ² λ©μλ("GET", "POST", "PUT", "DELETE" λ±) |
url | HTTP μμ²μ μ μ‘ν URL |
async | λΉλκΈ° μμ² μ¬λΆ. μ΅μ μΌλ‘ κΈ°λ³Έκ°μ trueμ΄λ©°, λΉλκΈ° λ°©μμΌλ‘ λμ |
HTTP μμ² λ©μλλ ν΄λΌμ΄μΈνΈκ° μλ²μμ μμ²μ μ’ λ₯μ λͺ©μ (리μμ€μ λν νμ)μ μ리λ λ°©λ²μ λλ€.
μλμ κ°μ΄ μ£Όλ‘ 5κ°μ§ μμ² λ©μλλ₯Ό μ¬μ©νμ¬ CRUDλ₯Ό ꡬνν©λλ€.
HTTP μμ² λ©μλ | μ’ λ₯ | λͺ©μ | νμ΄λ‘λ |
GET | index/retrieve | λͺ¨λ /νΉμ 리μλ μ·¨λ | X |
POST | create | 리μμ€ μμ± | O |
PUT | replace | 리μμ€μ μ 체 κ΅μ²΄ | O |
PATCH | modify | 리μμ€μ μΌλΆ μμ | O |
DELETE | delete | λͺ¨λ /νΉμ 리μμ€ μμ | X |
XMLHttpRequest.prototype.send
send λ©μλλ open λ©μλλ‘ μ΄κΈ°νλ HTTP μμ²μ μλ²μ μ μ‘ν©λλ€. κΈ°λ³Έμ μΌλ‘ μλ²λ‘ μ μ‘νλ λ°μ΄ν°λ GET, POST μμ² λ©μλμ λ°λΌ μ μ‘ λ°©μμ μ°¨μ΄κ° μμ΅λλ€.
GET μμ² λ©μλ
- λ°μ΄ν°λ₯Ό URLμ μΌλΆλΆμΈ 쿼리 λ¬Έμμ΄(query string)λ‘ μλ²μ μ μ‘
- λ°μ΄ν°(νμ΄λ‘λ, payload)λ‘ μ λ¬ν μΈμλ 무μλκ³ μμ² λͺΈμ²΄(request body)λ nullλ‘ μ€μ
POST μμ² λ©μλ
- λ°μ΄ν°(νμ΄λ‘λ, payload)λ₯Ό μμ² λͺΈμ²΄(request body)μ λ΄μ μ μ‘
- request bodyμ λ΄μ μ μ‘ν λ°μ΄ν°λ₯Ό μΈμλ‘ μ λ¬ν μ μμ
- νμ΄λ‘λκ° κ°μ²΄μΈ κ²½μ° λ°λμ JSON.stringigy λ©μλλ₯Ό μ¬μ©νμ¬ μ§λ ¬νν λ€μ μ λ¬ν΄μΌ ν¨
xhr.send(JSON.stringify({ id: 1, content: 'HTML', completed: false }));
XMLHttpRequest.prototype.setRequstHeader
νΉμ HTTP μμ²μ ν€λ κ°μ μ€μ νλ setRequstHeader λ©μλλ λ°λμ open λ©μλλ₯Ό νΈμΆν μ΄νμ νΈμΆν΄μΌν©λλ€.
setRequstHeader λ©μλλ‘ μ£Όλ‘ HTTP μμ² ν€λμΈ Content-typeκ³Ό Acceptλ₯Ό μ€μ ν©λλ€.
Content-typeμ μμ² λͺΈμ²΄μ λ΄μ μ μ‘ν λ°μ΄ν°μ MIME νμ μ μ 보λ₯Ό ννν©λλ€.
MIME νμ | μλΈ νμ |
text | text/plain, text/html, text/css, text/javascipt |
application | application/json, application/x-www-form-urlencode |
multipart | multipart/formed-data |
// XMLHttpRequest κ°μ²΄ μμ±
const xhr = new XMLHttpRequest();
// HTTP μμ² μ΄κΈ°ν
xhr.open('POST', '/users');
// HTTP μμ² ν€λ μ€μ
// ν΄λΌμ΄μΈνΈκ° μλ²λ‘ μ μ‘ν λ°μ΄ν°μ MIME νμ
μ§μ : json
xhr.setRequestHeader('content-type', 'application/json');
// HTTP μμ² μ μ‘
xhr.send(JSON.stringify({ id: 1, content: 'HTML', completed: false }));
HTTP ν΄λΌμ΄μΈνΈκ° μλ²μ μμ²ν λ μλ²κ° μλ΅ν λ°μ΄ν°μ MIME νμ μ Acceptλ‘ μ§μ ν μ μμ΅λλ€. λ§μ½ Accept ν€λλ₯Ό μ€μ νμ§ μμΌλ©΄ send λ©μλκ° νΈμΆλ λ Accept ν€λκ° */*μΌλ‘ μ μ‘λ©λλ€.
// μλ²κ° μλ΅ν λ°μ΄ν°μ MIME νμ
μ§μ : json
xhr.setRequestHeader('accept', 'application/json');
HTTP μλ΅ μ²λ¦¬
μλ²κ° μ μ‘ν μλ΅μ μ²λ¦¬νλ €λ©΄ XMLHttpRequest κ°μ²΄κ° λ°μμν€λ μ΄λ²€νΈλ₯Ό μΊμΉν΄μΌ ν©λλ€.
XMLHttpRequest κ°μ²΄μ μ΄λ²€νΈ νΈλ€λ¬ νλ‘νΌν° μ€μμ HTTP μμ²μ νμ¬ μνλ₯Ό λνλ΄λ readyState νλ‘νΌν° κ°μ΄ λ³κ²½λ κ²½μ° λ°μνλ readystatechange μ΄λ²€νΈλ₯Ό μΊμΉνμ¬ λ€μκ³Ό κ°μ΄ HTTP μλ΅μ μ²λ¦¬ν©λλ€.
// XMLHttpRequest κ°μ²΄ μμ±
const xhr = new XMLHttpRequest();
// HTTP μμ² μ΄κΈ°ν
// https://jsonplaceholder.typicode.comμ Fake REST APIλ₯Ό μ 곡νλ μλΉμ€λ€.
xhr.open('GET', 'https://jsonplaceholder.typicode.com/todos/1');
// HTTP μμ² μ μ‘
xhr.send();
// readystatechange μ΄λ²€νΈλ HTTP μμ²μ νμ¬ μνλ₯Ό λνλ΄λ readyState νλ‘νΌν°κ° λ³κ²½λ λλ§λ€ λ°μ
xhr.onreadystatechange = () => {
// readyState νλ‘νΌν°λ HTTP μμ²μ νμ¬ μνλ₯Ό λνλΈλ€.
// readyState νλ‘νΌν° κ°μ΄ 4(XMLHttpRequest.DONE)κ° μλλ©΄ μλ² μλ΅μ΄ μλ£λμ§ μνλ€.
// λ§μ½ μλ² μλ΅μ΄ μμ§ μλ£λμ§ μμλ€λ©΄ μλ¬΄λ° μ²λ¦¬λ₯Ό νμ§ μλλ€.
if (xhr.readyState !== XMLHttpRequest.DONE) return;
// status νλ‘νΌν°λ μλ΅ μν μ½λλ₯Ό λνλΈλ€.
// status νλ‘νΌν° κ°μ΄ 200μ΄λ©΄ μ μμ μΌλ‘ μλ΅λ μνμ΄κ³
// status νλ‘νΌν° κ°μ΄ 200μ΄ μλλ©΄ μλ¬κ° λ°μν μνλ€.
// μ μμ μΌλ‘ μλ΅λ μνλΌλ©΄ response νλ‘νΌν°μ μλ²μ μλ΅ κ²°κ³Όκ° λ΄κ²¨ μλ€.
if (xhr.status === 200) {
console.log(JSON.parse(xhr.response));
// {userId: 1, id: 1, title: "delectus aut autem", completed: false}
} else {
console.error('Error', xhr.status, xhr.statusText);
}
};
- μΈμ μλ΅μ΄ ν΄λΌμ΄μΈνΈμ λλ¬ν μ§λ μ μ μκΈ° λλ¬Έμ HTTP μμ²μ νμ¬ μνλ₯Ό λνλ΄λ readyState νλ‘νΌν°κ° λ³κ²½λ λλ§λ€ DONEμΈμ§ νμΈνμ¬ μλ²μ μλ΅μ΄ μλ£λμλμ§ νμΈ
- μλ²μ μλ΅μ΄ μλ£λλ©΄ HTTP μν μ½λκ° 200μΈμ§ νμΈνμ¬ μ μ μ²λ¦¬μ μλ¬ μ²λ¦¬λ₯Ό ꡬλΆ
- μλ΅μ΄ μ μμ μΌλ‘ λμ°©νλ€λ©΄ μμ²μ λν μλ΅ λͺΈμ²΄λ₯Ό λνλ΄λ xhr.responceμμ μλ²κ° μ μ‘ν λ°μ΄ν°λ₯Ό μ·¨λ
- λ§μ½ xhr.statusκ° 200μ΄ μλλ©΄ μλ¬κ° λ°μν μνμ΄λ―λ‘ νμν μλ¬ μ²λ¦¬λ₯Ό ν¨
μ΄λ¬ν readystatechange μ΄λ²€νΈ λμ HTTP μμ²μ΄ μ±κ³΅μ μΌλ‘ μλ£λ κ²½μ° λ°μνλ load μ΄λ²€νΈλ₯Ό μΊμΉν΄λ λ©λλ€.
// XMLHttpRequest κ°μ²΄ μμ±
const xhr = new XMLHttpRequest();
// HTTP μμ² μ΄κΈ°ν
// https://jsonplaceholder.typicode.comμ Fake REST APIλ₯Ό μ 곡νλ μλΉμ€λ€.
xhr.open('GET', 'https://jsonplaceholder.typicode.com/todos/1');
// HTTP μμ² μ μ‘
xhr.send();
// load μ΄λ²€νΈλ HTTP μμ²μ΄ μ±κ³΅μ μΌλ‘ μλ£λ κ²½μ° λ°μνλ€.
xhr.onload = () => {
// status νλ‘νΌν°λ μλ΅ μν μ½λλ₯Ό λνλΈλ€.
// status νλ‘νΌν° κ°μ΄ 200μ΄λ©΄ μ μμ μΌλ‘ μλ΅λ μνμ΄κ³
// status νλ‘νΌν° κ°μ΄ 200μ΄ μλλ©΄ μλ¬κ° λ°μν μνλ€.
// μ μμ μΌλ‘ μλ΅λ μνλΌλ©΄ response νλ‘νΌν°μ μλ²μ μλ΅ κ²°κ³Όκ° λ΄κ²¨ μλ€.
if (xhr.status === 200) {
console.log(JSON.parse(xhr.response));
// {userId: 1, id: 1, title: "delectus aut autem", completed: false}
} else {
console.error('Error', xhr.status, xhr.statusText);
}
};
[μΆμ²] λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive: μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έ κ°λ κ³Ό λμ μ리
269κ°μ κ·Έλ¦Όκ³Ό μ리λ₯Ό νν€μΉλ μ€λͺ μΌλ‘ ‘μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έ κ°λ κ³Ό λμ μ리’λ₯Ό μ΄ν΄νμ! μΉνμ΄μ§μ λ¨μν 보쑰 κΈ°λ₯μ μ²λ¦¬νκΈ° μν μ νμ μΈ μ©λλ‘ νμ΄λ μλ°μ€ν¬λ¦½νΈλ κ³Όλ
wikibook.co.kr