-
도로명주소 검색 API 적용 해보기JAVA/Egov 2020. 4. 7. 09:09
<body>
<input type="hidden" id="currentPage" value="1" style="text-align:center;"/> <input type="hidden" id="countPerPage" value="5" style="text-align:center;"/> <input type=text id="zipCode" value="" onClick="addressWindowOpen();" placeholder="00000" readOnly /> <a class="btn btn-info btn-sm" href='javascript:void(0);' onclick="addressWindowOpen();">우편번호 찾기</a> <div id="wrap" style="display: none;"> <a class="btn btn-danger" id="closeBtn" href='javascript:void(0);' onclick="addressWindowClose();"><i class="fa fa-remove"></i></a> <div> <input type="text" id="searchAddr" value="" onkeydown="enterSearch();" placeholder="도로명주소, 건물명 또는 지번 입력"/> <a class="btn btn-info btn-sm" href='javascript:void(0);' onclick="getAddr();">주소검색</a> </div> <div> <div id="totoalOutcome"> 검색결과 : <span id="totalCnt">0</span> </div> <table id="list" style="width: 100%; border: 1px;"></table> </div> <div id="pagingList" style='text-align:center;'></div> </div> <div style="height:5px;"></div> <input type="text" id="address" value="" placeholder="도로명 주소, 지번 주소" readonly/> <div style="height:5px;"></div> <input type="text" id="detail" value="" placeholder="상세 주소지 입력"/>
<script>
/// @brief 주소검색창 - 키보드 Enter키 입력 function enterSearch() { var evt_code = (window.netscape) ? event.which : event.keyCode; if (evt_code == 13) { event.keyCode = 0; getAddr(); } }
//도로명주소 function getAddr(){ // 적용예 (api 호출 전에 검색어 체크) var keyword = document.getElementById("searchAddr"); if (!checkSearchedWord(keyword)) { return ; } $.ajax({ url :"http://www.juso.go.kr/addrlink/addrLinkApiJsonp.do" ,type:"post" ,data:{ confmKey : "devU01TX0FVVEgyMDIwMDMyNzEyNDMyNzEwOTU5Mzg=" , currentPage : document.getElementById("currentPage").value , countPerPage : document.getElementById("countPerPage").value , keyword : keyword.value , resultType : "json" } ,dataType:"jsonp" ,crossDomain:true ,success:function(jsonStr){ $("#list").html(""); var errCode = jsonStr.results.common.errorCode; var errDesc = jsonStr.results.common.errorMessage; if(errCode!= "0"){ alert(errCode+"="+errDesc); }else{ if(jsonStr!= null){ makeListJson(jsonStr); console.log(jsonStr); // JSON데이터 HTML형태로 변환 } } },error: function(xhr,status, error){ alert("에러발생"); } }); }
/// @brief 주소검색창 - 주소지 선택 function makeListJson(jsonStr) { let htmlStr = "<thead><tr><th style='width:70px;'>우편번호</th><th>주소</th></tr></thead><tbody>"; if(jsonStr.results.common.totalCount > 0) { jQuery("#totoalOutcome").css("display", "block"); jQuery("#totalCnt").html(jsonStr.results.common.totalCount); jQuery(jsonStr.results.juso).each(function() { let zipNo = this.zipNo; // 우편번호 let roadAddr = this.roadAddr; // 도로명 주소 let jibunAddr = this.jibunAddr; // 지번 주소 htmlStr += "<tr style='border:1px;'>"; htmlStr += "<td>"; htmlStr += "<a href='javascript:;' onClick='inputTextAddress(\""+zipNo+"\", \""+roadAddr+"\");'>"; htmlStr += zipNo; htmlStr += "</a>"; htmlStr += "</td>"; htmlStr += "<td>"; htmlStr += "<a href='javascript:;' onClick='inputTextAddress(\""+zipNo+"\", \""+roadAddr+"\");'>"; htmlStr += "도로명 : " + roadAddr; htmlStr += "</a>"; htmlStr += "<br/>"; htmlStr += "<a href='javascript:;' onClick='inputTextAddress(\""+zipNo+"\", \""+jibunAddr+"\");'>"; htmlStr += "지번 : " + jibunAddr; htmlStr += "</a>"; htmlStr += "</td>"; htmlStr += "</tr>"; }); pageMake(jsonStr); } else { htmlStr += "<tr><td colspan='2'>조회된 데이터가 않습니다.<br/>다시 검색하여 주시기 바랍니다.</td></tr>"; } htmlStr += "</tbody>"; jQuery("#list").html(htmlStr); }
/// @brief 주소검색창 - 주소지 삽입 function inputTextAddress(zipcode, address) { document.getElementById("zipCode").value = zipcode; document.getElementById("address").value = address; }
/// @brief 주소검색창 - 열기 function addressWindowOpen() { jQuery("#wrap").slideDown(); jQuery("#searchAddr").focus(); }
/// @brief 주소검색창 - 닫기 function addressWindowClose() { jQuery("#wrap").slideUp(); jQuery("#searchAddr").val(""); jQuery("#totoalOutcome").css("display", "none"); jQuery("#list").empty(); jQuery("#pagingList").empty(); jQuery("#currentPage").val("1"); }
//특수문자, 특정문자열(sql 예약어의 앞뒤 공백 포함) 제거 function checkSearchedWord(obj){ console.log(obj); if(obj.value.length > 0){ //특수문자 제거 var expText = /[%=><]/ ; if(expText.test(obj.value) == true){ alert("특수문자를 입력 할수 없습니다.") ; obj.value = obj.value.split(expText).join(""); return false; } //특정문자열(sql예약어의 앞뒤공백포함) 제거 var sqlArray = new Array( //sql 예약어 "OR", "SELECT", "INSERT", "DELETE", "UPDATE", "CREATE", "DROP", "EXEC", "UNION", "FETCH", "DECLARE", "TRUNCATE" ); var regex; for(var i=0; i<sqlArray.length; i++){ regex = new RegExp( sqlArray[i] ,"gi") ; if (regex.test(obj.value) ) { alert("\"" + sqlArray[i]+"\"와(과) 같은 특정문자로 검색할 수 없습니다."); obj.value =obj.value.replace(regex, ""); return false; } } } return true ; }
/// @brief 주소검색창 - 페이징 생성 function pageMake(jsonStr) { var total = jsonStr.results.common.totalCount; // 총건수 var pageNum = document.getElementById("currentPage").value; // 현재페이지 var pageBlock = Number(document.getElementById("countPerPage").value); // 페이지당 출력 개수 var paggingStr = ""; // 검색 갯수가 페이지당 출력갯수보다 작으면 페이징을 나타내지 않는다. if(total > pageBlock) { var totalPages = Math.floor((total - 1) / pageNum) + 1; var firstPage = Math.floor((pageNum - 1) / pageBlock) * pageBlock + 1; if(firstPage <= 0) { firstPage = 1; }; var lastPage = (firstPage - 1) + pageBlock; if(lastPage > totalPages) { lastPage = totalPages; }; var nextPage = lastPage + 1; var prePage = firstPage - pageBlock; if(firstPage > pageBlock) { paggingStr += "<a href='javascript:;' onClick='goPage(" + prePage + ");'>◀</a>"; paggingStr += " "; } for(let num = firstPage; lastPage >= num; num++) { if(pageNum == num) { paggingStr += "<a style='font-weight:bold;color:#0000FF;' href='javascript:;'>" + num + "</a>"; paggingStr += " "; } else { paggingStr += "<a href='javascript:;' onClick='goPage(" + num + ");'>" + num + "</a>"; paggingStr += " "; } } if(lastPage < totalPages) { paggingStr += "<a href='javascript:;' onClick='goPage(" + nextPage + ");'>▶</a>"; } } jQuery("#pagingList").html(paggingStr); }
/// @brief 페이징 이동 function goPage(pageNum) { document.getElementById("currentPage").value = pageNum; getAddr(); }
결과
'JAVA > Egov' 카테고리의 다른 글
스프링 레거시 - 파일업로드 위한 세팅 (0) 2020.04.01 Mybatis - Resultmap을 사용해서 VO 여러가지를 join쿼리 사용하여 매핑 (0) 2020.03.23 jsp파일 수정 후 서버 재시작 없이 새로고침으로 반영하기 (0) 2020.03.18