반응형
주소 API를 활용해서 주소 검색 기능을 구현해보자
1. 해당 URL로 접속한다.
https://www.juso.go.kr/CommonPageLink.do?link=/addrlink/devAddrLinkRequestSample
2. 오른쪽에 있는 신청하기 버튼을 클릭한다.
3. 정보 입력 후 API를 신청하면, 승인키가 발급된다. (예제는 팝업 API가 아닌 검색 API로 진행하겠다.)
4. 주소 API를 호출해보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | <script type="text/javascript"> /* 주소 API 적용 시작 */ // 주소 검색 function Search_Post_API(PageNo) { var intPageSize = 10; var intTotalPages = 0; // 검색API URL은 프로토콜(http/https) 맞춰서 설정한다. var strUrl = window.location.protocol + "//www.juso.go.kr/addrlink/addrLinkApiJsonp.do"; if (!searchJuso()) { try { $.ajax({ url: strUrl , type: "post" , data: ({ currentPage: PageNo, countPerPage: intPageSize, keyword: $("#txt_SearchText").val(), confmKey: $("#hid_Key").val() }) , dataType: "jsonp" , crossDomain: true , success: function (xmlStr) { if (navigator.appName.indexOf("Microsoft") > -1) { var xmlData = new ActiveXObject("Microsoft.XMLDOM"); xmlData.loadXML(xmlStr.returnXml) } else { var xmlData = xmlStr.returnXml; } var errCode = $(xmlData).find("errorCode").text(); var errDesc = $(xmlData).find("errorMessage").text(); var PostList = ""; if (errCode == "0") { if (xmlStr != null) { PostList += "<p><strong>" + $(xmlData).find("totalCount").text() + "개</strong>의 주소가 검색되었습니다.</p>"; PostList += "<ul>"; $(xmlData).find("juso").each(function (i) { PostList += "<li>"; PostList += "<a href=\"javascript:SetOpenerValue('" + $(xmlData).find("zipNo").eq(i).text() + "', '" + $(xmlData).find("roadAddr").eq(i).text().replace("'"," ") + "');\">"; PostList += "<em>" + $(xmlData).find("zipNo").eq(i).text() + "</em>"; PostList += "<span>" + $(xmlData).find("roadAddr").eq(i).text() + "<br/>" + $(xmlData).find("jibunAddr").eq(i).text() + "</span>"; PostList += "</a>"; PostList += "</li>"; }); PostList += "</ul>"; $("#dvSearchArea").html(PostList); // 페이징 if ($(xmlData).find("totalCount").text() != 0) { intTotalPages = Math.ceil($(xmlData).find("totalCount").text() / intPageSize); $("#div_paginate").html(PageLink(PageNo, intTotalPages, "Search_Post_API")); } } } else if (errCode == "E0005") { alert("검색어를 입력해주세요."); } else if (errCode == "E0006") { alert("주소를 상세히 입력해주세요."); } else { // 에러발생시 주소DB 호출 ErrorJuso(); } } , error: function (xhr, status, error) { ErrorJuso(); } }); } catch (e) { ErrorJuso(); } } return; } // 검색 API 서비스 오류 function ErrorJuso() { alert("에러발생 시 코드 작성"); } // 검색 API 호출 전 검색어 체크 function searchJuso() { if (!checkSearchedWord($("#txt_SearchText").val().toUpperCase())) { return true; } else { return false; } } // 특수문자, 특정문자열(sql예약어의 앞뒤공백포함) 제거 function checkSearchedWord(obj) { if (obj != null && obj != "") { //특수문자 제거 var expText = /[%=><+!^*]/; if (expText.test(obj) == true) { alert("특수문자를 입력 할수 없습니다."); $("#txt_SearchText").val(obj.replace(expText, "")); return false; } //특정문자열(sql예약어의 앞뒤공백포함) 제거 var sqlArray = new Array("AND", "OR", "SELECT", "INSERT", "DELETE", "UPDATE", "CREATE", "ALTER", "DROP", "EXEC", "UNION", "FETCH", "DECLARE", "TRUNCATE", "SHUTDOWN"); for (var i = 0; i < sqlArray.length; i++) { if (obj.match(sqlArray[i])) { alert(sqlArray[i] + "와(과) 같은 특정문자로 검색할 수 없습니다."); $("#txt_SearchText").val(obj.replace(sqlArray[i], "")); return false; } } } return true; } // 임시 페이징 function PageLink(curPage, totalPages, funName) { pageUrl = ""; var pageLimit = 5; var startPage = parseInt((curPage - 1) / pageLimit) * pageLimit + 1; var endPage = startPage + pageLimit - 1; if (totalPages < endPage) { endPage = totalPages; } var nextPage = endPage + 1; if (curPage > 1 && pageLimit < curPage) { pageUrl += "<a class='first' href='javascript:" + funName + "(1);'><img src='/images_new/common/2016/btn_paging_first.gif' alt='처음' /></a>"; } if (curPage > pageLimit) { pageUrl += " <a class='prev' href='javascript:" + funName + "(" + (startPage == 1 ? 1 : startPage - 1) + ");'><img src='/images_new/common/2016/btn_paging_prev.gif' alt='이전' /></a>"; } for (var i = startPage; i <= endPage; i++) { if (i == curPage) { pageUrl += " <a href='#'><strong>" + i + "</strong></a>" } else { pageUrl += " <a href='javascript:" + funName + "(" + i + ");'> " + i + " </a>"; } } if (nextPage <= totalPages) { pageUrl += "<a class='next' href='javascript:" + funName + "(" + (nextPage < totalPages ? nextPage : totalPages) + ");'><img src='/images_new/common/2016/btn_paging_next.gif' alt='다음' /></a>"; } if (curPage < totalPages && nextPage < totalPages) { pageUrl += "<a class='last' href='javascript:" + funName + "(" + totalPages + ");'><img src='/images_new/common/2016/btn_paging_last.gif' alt='끝' /></a>"; } return pageUrl; } /* 주소 API 적용 끝 */ </script> ... <input type="hidden" id="hid_Key" value="승인키값"/> <!-- 검색API Key --> ... <label for="inptxt3">검색어</label><input type="text" id="txt_SearchText"/> <img src="/images_new/main/btn_srch.gif" alt="검색" onclick="javascript:Search_Post_API('1');" /> ... <div id="dvSearchArea" class="cresultArea"></div> <div id="div_paginate" class="paginate"></div> | cs |
반응형
'프로그래밍 > 기타' 카테고리의 다른 글
[네트워크] ping, telnet, tracert (1) | 2019.07.24 |
---|