<button id="xhr-promise-btn">게시글 데이터 요청 후 게시글 총 수 화면에 출력</button>
<div>게시글 수: <span id="post-count">0</span></div>
<span id="post-count"> 안에 게시글 총 수를 표시하는 구조.document.querySelector('#xhr-promise-btn').addEventListener("click", () => {
fetchDataXML()
.then((responseText) => JSON.parse(responseText))
.then((jsonData) => document.querySelector("#post-count").innerText = jsonData.lentgh )
.catch((status) => console.log('데이터 요청 실패', status) )
})
버튼 클릭 → fetchDataXML() 호출
.then((responseText) => JSON.parse(responseText))
.then((jsonData) => … )
.catch(...)
function fetchDataXML() {
return new Promise((resolve, reject) => {
const xml = new XMLHttpRequest();
xml.open("GET", 'https://jsonplaceholder.typicode.com/posts');
xml.addEventListener('load',() => {
if(xml.status === 200){
resolve(xml.reposeText);
}else {
reject(xml.status)
}
})
xml.send();
})
}
new Promise((resolve, reject) => {...})
resolve(data)reject(status) 호출XMLHttpRequest 객체 생성
const xml = new XMLHttpRequest();
xml.open("GET", 'https://jsonplaceholder.typicode.com/posts');
xml.addEventListener('load', () => {
if(xml.status === 200){
resolve(xml.reposeText); // <- 여기 오타 있음 (reposeText → responseText)
} else {
reject(xml.status)
}
})
xml.send()fetchDataXML() 호출 → Promise 반환JSON.parse() → 객체 변환length) → 화면에 출력.catch()에서 상태코드 출력📌 주의: 코드 안에는 작은 오타가 있어요
xml.reposeText // ❌
xml.responseText // ✅
또한
jsonData.lentgh // ❌
jsonData.length // ✅
.then()으로 응답 처리, .catch()로 오류 처리원하면 내가 이 코드를 async/await 버전으로 바꾸어서
.then 체인 없이JSON.parse(responseText)) 가 객체로 변환한다는거야?
맞아요 ✅ 정확히 이해했어요.
조금 더 풀어서 설명하면 이렇게 됩니다.
'[{"id":1,"title":"hello"},{"id":2,"title":"world"}]'
문자열로 되어 있음 → 아직 JS 객체가 아님
JSON.parse(responseText)
[
{id:1, title:"hello"},
{id:2, title:"world"}
]
jsonData[0].title 같은 식으로 바로 접근 가능| 단계 | 데이터 형태 | 접근 가능 여부 |
|---|---|---|
| 서버 응답 | 문자열 JSON | 문자열이므로 jsonData[0].title 불가 |
| JSON.parse() 후 | JS 객체/배열 | 객체처럼 jsonData[0].title 접근 가능 |
parse가 뭔데?
좋아, 여기서 아주 기본부터 잡아볼게 😎
"글자를 해석해서 컴퓨터가 이해할 수 있는 자료 형태로 변환"
라고 생각하면 돼요.
const jsonString = '{"name":"홍길동","age":20}';
const obj = JSON.parse(jsonString);
console.log(obj.name); // "홍길동"
JSON.parse()를 쓰면obj.name, obj.age처럼 속성 접근 가능JSON.stringify(obj)<button id="xhr-promise-btn">게시글 데이터 요청</button>
<div>게시글 수: <span id="post-count">0</span></div>
span 준비document.querySelector('#xhr-promise-btn').addEventListener("click", () => {
// 나중에 작성할 fetchDataXML() 호출
});
function fetchDataXML() {
return new Promise((resolve, reject) => {
const xml = new XMLHttpRequest();
xml.open("GET", 'https://jsonplaceholder.typicode.com/posts');
xml.addEventListener('load', () => {
if(xml.status === 200){
resolve(xml.responseText); // 성공하면 resolve
} else {
reject(xml.status); // 실패하면 reject
}
});
xml.send();
});
}
new Promise() → 성공(resolve) / 실패(reject) 처리document.querySelector('#xhr-promise-btn').addEventListener("click", () => {
fetchDataXML()
.then(responseText => JSON.parse(responseText)) // 문자열 → 객체 변환
.then(jsonData => document.querySelector("#post-count").innerText = jsonData.length) // 게시글 수 표시
.catch(status => console.log('데이터 요청 실패', status)); // 에러 처리
});
fetchDataXML() 호출 → Promise 객체 반환resolve(responseText) 또는 reject(status).then() → JSON.parse → 객체로 변환 → 화면에 데이터 출력.catch() → 실패 시 에러 처리