ajax의 xml을 javascript 객체형식으로 자동 변환
/**
* Author : MC 심새 (ganer9r@naver.com)
* Make Date : 2006-09-22
* comment : ajax의 xml을 javascript 객체형식으로 자동 변환
**/
/* Ajax 사용을 위한 기본 콤포넌트 Start */
function AjaxDataControl(){
this.xmlHttp = null;
this.getHttpRequest = function(URL, object){
var xmlHttp = this.xmlHttp;
var xmlData = null;
// FF일 경우 window.XMLHttpRequest 객체가 존재한다.
if(!xmlHttp){
if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
this.xmlHttp = xmlHttp;
}
xmlHttp.open('GET', URL, true);
xmlHttp.onreadystatechange = function() {
// readyState 가 4 고 status 가 200 일 경우 올바르게 가져옴
if(xmlHttp.readyState==4 && xmlHttp.status == 200 && xmlHttp.statusText=='OK') {
var xmlData = xmlHttp.responseXML;
object.setXmlData(xmlData);
}
}
xmlHttp.send('');
}
this.getXmlRootNode = function(nodes, rootName){
var rootNode = nodes.getElementsByTagName(rootName);
return rootNode;
}
}
/* Ajax 사용을 위한 기본 콤포넌트 End */
/* Ajax에서 리턴받은 XML NODE를 JAVASCRIPT OBJECT 형식으로 변환 Start */
function AjaxObject(){
this.ac = null;
this.xmlData = null;
this.rootName = null;
this.functionName = null;
this.arguments = new Array();
this.inArray = function(array, value){
var result = false;
for(var i=0; i < array.length; i++){
if(array[i] == value){
result = true;
break;
}
}
return result;
}
this.getHttpRequest = function(Url, functionName){
if(this.ac == null){
this.ac = new AjaxDataControl();
}
this.functionName = functionName;
for(var i=2; i <arguments.length; i++){
this.arguments.push(arguments[i]);
}
this.ac.getHttpRequest(Url, this);
}
this.setMakeObject = function(nodeData){
var resultObject = new Object;
resultObject.length = 0;
if(nodeData.hasChildNodes() ){
var nodeChilds = nodeData.childNodes;
var nodeNameList = new Array();
var isNodeChilds = false;
for(var i = 0; i<nodeChilds.length;i++){
if(nodeChilds[i].nodeType == '1'){
var returnObj = this.setMakeObject(nodeChilds[i] );
if( typeof(returnObj) == "string"){
resultObject[ nodeChilds[i].nodeName ] = this.setMakeObject(nodeChilds[i] );
resultObject.length += 1;
}else{
if(resultObject[ nodeChilds[i].nodeName ]){
resultObject[ nodeChilds[i].nodeName ].push( returnObj );
}else{
resultObject[ nodeChilds[i].nodeName ] = new Array();
resultObject[ nodeChilds[i].nodeName ].push( returnObj );
resultObject.length += 1;
}
}
isNodeChilds = true;
}
}
if(!isNodeChilds){
resultObject = nodeChilds[0].nodeValue;
}else{
}
}
return resultObject;
}
this.setMakeControl = function(){
if(this.xmlData != null){
var rootNode = this.ac.getXmlRootNode(this.xmlData, this.rootName);
var list = this.setMakeObject(rootNode[0]);
var args = "";
for(var i=0; i<this.arguments.length; i++){
args += ", this.arguments["+i+"]";
}
eval( this.functionName+"(list "+args+")" );
}
}
this.setXmlData = function(data){
this.xmlData = data;
this.rootName = data.documentElement.nodeName;
this.setMakeControl();
}
}
/* Ajax에서 리턴받은 XML NODE를 JAVASCRIPT OBJECT 형식으로 변환 End */
/* 사용법 Start*/
// var aObj = new AjaxObject; // AjaxList 선언
// aObj.getHttpRequest("test.xml", "displayBoardList", [인자값]); //참조Url, 리턴 함수명
// 리턴 함수에는 obj를 받을 인자 필수!!!
//
// 리턴 함수에, 변환된 데이터 이외의 인자를 받고 싶으면 계속 이어서 쓰세요
// 예] aObj.getHttpRequest("test.xml", "displayBoardList", "test", 1, "all", ... );
/* 사용법 End */