티스토리 뷰
ajax로 xml 파싱하기
먼저 xml의 구조는 아래와 같다.
news.xml
_blank http://daum.com_blank http://google.com_blank http://serpiko.tistory.com_blank http://bing.com
jQuery에서 ajax메서드를 사용하여 아래와 같이 XMLHttpRequest를 사용한 파싱이 가능하다.
<!DOCTYPE HTML> <html lang="ko"> <head> <title> NewDocument </title> <meta charset="utf-8"> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="XMLLoader.js"></script> <script> var _xml; var _arrTarget = []; var _arrLink = []; var _arrDesc = []; </script> </head> <body> <script> $(document).ready(function(){ init(); }); function init() { jQuery.ajax({ dataType:"xml", url:"xml/news.xml", success:function(data){ load(data); }, complete:function(){ //alert("complete"); }, error:function(xhr,status){ console.log(xhr, status); } }); } function load($xml) { _xml = $($xml).find("xml"); var len = _xml.find("news").length; for(var i=0; i<len; ++i) { _arrTarget[i] = _xml.find("news").eq(i).find("target").text(); _arrLink[i] = _xml.find("news").eq(i).find("link").text(); _arrDesc[i] = _xml.find("news").eq(i).find("name").text(); $("body").append(_arrTarget[i]).append(_arrLink[i]).append(_arrDesc[i]).append("<br />"); } } </script> </body> </html>
결과)
위에서 사용한 ajax XML을 XMLLoader.js로 라이브러리화 시키면 아래와 같다.
(직접만든것은 아니고 과장님이)
/**************************************************************** * title : * author : Song-Hyun, Kim (shk@pulipinc.com) * last update : 2011.04.26 * comment :""; * use : * XMLLoader.url = "http://localhost/xml/gnb/gnb.xml"; XMLLoader.complete = load; XMLLoader.error = errorHandler; XMLLoader.init(); ****************************************************************/ var XMLLoader = {} XMLLoader.init = init; XMLLoader.xmlLoad = xmlLoad; XMLLoader.complete = null; XMLLoader.error = null; XMLLoader.url = ""; XMLLoader.type = "xml"; /**************************************************************** * init ****************************************************************/ function init() { xmlLoad(); }; /**************************************************************** * load ****************************************************************/ function xmlLoad() { //alert("load"); jQuery.ajax({ type:"GET", dataType:XMLLoader.type, url:XMLLoader.url, success: function(data){ XMLLoader.complete(data); }, complete: function() { //alert("complete"); }, error: function(xhr, status) { XMLLoader.error(xhr, status) } }); }
사용할때에는 XMLLoader.js의 오브젝트트들을 참조하여 경로와 함수만 대입하여 참조 시켜주면 된다.
<!DOCTYPE HTML> <html lang="ko"> <head> <title> NewDocument </title> <meta charset="utf-8"> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript" src="XMLLoader.js"></script> <script> var _xml; var _arrTarget = []; var _arrLink = []; var _arrDesc = []; </script> </head> <body> <script> $(document).ready(function(){ init(); }); function init() { XMLLoader.url = "xml/news.xml"; XMLLoader.complete = load; XMLLoader.error = errorHandler; XMLLoader.init(); } function load($xml) { _xml = $($xml).find("xml"); var len = _xml.find("news").length; for(var i=0; i<len; ++i) { _arrTarget[i] = _xml.find("news").eq(i).find("target").text(); _arrLink[i] = _xml.find("news").eq(i).find("link").text(); _arrDesc[i] = _xml.find("news").eq(i).find("name").text(); $("body").append(_arrTarget[i]).append(_arrLink[i]).append(_arrDesc[i]).append("<br />"); } } function errorHandler(xhr, status) { console.log(xhr, status); } </script> </body> </html>
결과는 동일하다)
'■ 프론트엔드 ■ > AJAX' 카테고리의 다른 글
아이디 중복확인 with. 제이쿼리, AJAX (0) | 2015.02.02 |
---|---|
04. 제이쿼리 ajax and php JSON데이터 (0) | 2014.08.28 |
03. 제이쿼리 load → JSON데이터 (0) | 2014.08.28 |
02. XMLHttpRequest 함수화 - sendRequest(url, param, callback, method, asyncBool) (0) | 2014.08.28 |
01. XMLHttpRequest 함수화 기본형 (0) | 2014.08.28 |
댓글