html 페이지 이동 시에도 js 전역변수 값 유지하면서 가져오기 (서울시 유치원 정보 사이트 프로젝트 ep.2)
designer DK2024. 8. 24. 17:00
728x90
이번프로젝트를개발함에있어서가장첫번째로구현하려는기능은홈화면에서각서울시구에해당하는버튼을 눌렀을 때 list.html이라는 해당 구 유치원 목록 화면으로 이동해서 눌렀던 버튼의 텍스트콘텐츠로 api를 조회해서 목록카드를 채워서 나열해주는 것이었다.
이 부분을 해결함에 있어서 두가지 부분에서 부딪혔었는데 첫번째는 서울 열린 데이터 광장에서 데이터를 가져오는 부분이었다.
데이터를 XML방식으로 제공해줘서 난감했다 ;;
XML방식으로 작업해보려고 시도도 해보았고 json으로의 변환 방식도 찾아보긴 했었지만 둘 다 너무 복잡해서 프로젝트를 함에 있어서 배보다 배꼽이 더 커지겠다고 판단되었다. 그래서 XML로 가져오는 것은 과감히 접고 다행히 json을 개별 파일로는 제공해주길래 그걸 직접 다운받아서 사용해보기로 했다. 몇달마다 업데이트쳐주긴 해야겠지만 당장은 이게 최선이라고 생각되었다.
일단 임시로 5개 정도 서울시 구 배열을 만들었고
letguName=
['강서구', '강남구', '강동구', '광진구', '송파구']
letclickedGuName;
// 구 버튼을 생성하고 눌렀을 때 서치리스트 기능을 실행
guName.forEach((item) => {
constguBTN=`
<button id="gu-btn" onClick="
clickedGuName = this.textContent;
">${item}</button>
`;
document.querySelector(".states-btn-container")
.insertAdjacentHTML("beforeend", guBTN);
});
// 구 버튼 눌렀을 때 clickedGuName을 통해 api를 조회해서 목록을 생성해주는 기능
functionsearchList(clickedGuName){
fetch("./json/kinderGeneral.json")
.then((response) =>response.json())
.then((data) => {
for(leti=0; i<data.DATA.length; i++){
if(data.DATA[i].addr.includes(clickedGuName)){
document.querySelector(".list-container")
.insertAdjacentHTML("beforeend", listCard);
}
}
});
};
해당 데이터로 버튼을 생성시키고 그 버튼을 눌렀을 때 api 정보를 조회하는건 생각보다 빠르게 풀렸다. includes라는 것을 이용해서 클릭한 버튼 내용인 구이름이 포함된 데이터만 추리고 그 안에서 다시 정보를 가져올 수 있었다.
(버튼을 누르면서 console.log로 유치원 정보들 불렀을 때 순간적으로 이젠 개발 좀 한다고 착각했음)
하지만 바로 두번째 난관에 봉착.
버튼을 눌러서 list.html이라는 페이지로 이동했더니 새 페이지에서는 그게 작동하지 않았다. 이리저리 고민해봤더니 내가 눌렀을 때 해당 버튼 텍스트 콘텐츠를 저장하는 전역변수인 clickedGuName이 새 페이지가 열리는 순간 초기화되었고 서치를 해봐도 원래 그렇게 초기화된다고 한다.
난관에 빠진 나를 구해준건 다름아닌 챗 gpt였다. 혹시나해서 코드와 함께 물어봤는데 정확한 해결방법을 알려주었다. *ㅁ*
전역변수는 페이지가 이동될 때 초기화되는 게 정상이긴한데 저장해서 이동해도 유지시킬 수 있는 localStorage 라는 것을 사용하면 이 문제를 해결할 수 있었다.