[AJAX 클래스] mb_ajax (간단한 AJAX 컨트롤 클래스, 한글 인코딩 지원 UTF-8)

[DEMO]


/*
-=--------------------------- ex

var test_ajax = new mb_ajax();
test_ajax.sendRequest(callback,'&test=1','GET','test.xml')
function callback(res){
alert(res.responseText);
var xmlDoc = res.responseXML;
var nodes = xmlDoc.getElementsByTagName('test');
alert(nodes.length);
alert(nodes[0].firstChild.nodeValue);
}

*/
/*
-=-------------------------------- 사용법
 //UTF-8로 js파일이 저장 되어있으므로 charset='utf-8' 는 필수

사용법1
var test_ajax = new mb_ajax();
test_ajax.sendRequest(callback,'&test=1','GET','test.xml');

사용법2
var test_ajax = new mb_ajax(callback,'&test=1','GET','test.xml');
*/
/*
-=-------------------------------- 알려진 문제
IE에서는 하드에서(localhost가 아님) 실행시 XML를 제대로 읽어들이지 못하는 버그가 있음 (IE버그, FF에서는 정상동작, 웹에 올리면 IE에서도 정상동작)
현재 동작하는 파일과 대상 파일(XML등)의 URL이 다르면 제대로 동작하지 않음 ( 보안 문제때문에 모든 브라우저에서 막은 상황 : 해결법: PHP등에서 파일을 긁어와서 보여줌)

*/


var mb_ajax = function(fn_callback,v_data,v_method,v_url,v_async,v_refresh,v_user,v_password){
//클래스 생성
//alert(v_data+"\n"+v_method+"\n"+v_url+"\n"+v_async+"\n"+v_refresh+"\n"+v_user+"\n"+v_password);
 this.XMLHttp = this.createHttpRequest();
 if(!this.ck_made_XMLHttp()){return false;}
 if(v_url){ //클래스 생성시 바로 시작한다.
  this.sendRequest(fn_callback,v_data,v_method,v_url,v_async,v_refresh,v_user,v_password);
 }
}
mb_ajax.prototype.ck_made_XMLHttp= function(){
//XMLHttpRequest 가 생성되어있는지 체크한다. true:false;
 if(!this.XMLHttp){
 alert('실패');
  return false;
 }else{
  return true; 
 }
}
mb_ajax.prototype.createHttpRequest= function(){
//XMLHttpRequest 를 생성한다.
 if(!document.getElementById){
 // DOM이 지원 안된다. : 선택사항
  return null;
 }
 if(window.ActiveXObject){
 //Win IE4+
  try {
    return new ActiveXObject("Msxml2.XMLHTTP") ;
  } catch (e) {
   try {
    return new ActiveXObject("Microsoft.XMLHTTP") ;
   } catch (e2) {
    return null ;
   }
  }
 } else if(window.XMLHttpRequest){
 //IE를 제외한 브라우저
  return new XMLHttpRequest() ;
 } else {
 // XMLHttpRequest를 지원하지 않는 경우
  return null ;
 }
}
//---------------------------------------------------- send(),open()
// fn_callback:콜백함수
// v_data:&name=value 형식의 넘김값
// v_method:넘김방법
// v_url:대상url
// v_async:비동기 설정 [기본:true]
// v_refresh:항상새로읽기 설정(URL 뒤에 시간값을 붙여서 항상 새로부른다.)
// v_user:인증 아이디
// v_password:인증 비밀번호
mb_ajax.prototype.sendRequest= function(fn_callback,v_data,v_method,v_url,v_async,v_refresh,v_user,v_password){
 //alert(v_method+'\n'+v_url+'\n'+v_async+'\n'+v_refresh+'\n'+v_user+'\n'+v_password);  //for debug

 if(!this.ck_made_XMLHttp) return false;

 if(v_refresh == null) v_refresh = false;
 if( (v_refresh || v_method.toUpperCase() =='GET') && v_url.indexOf('?')==-1) v_url+="?";
 var times = (new Date()).getTime().toString();
 if(v_refresh) v_url+='tt'+times.substr(5)+'='+times; //항상 새로고침으로 가져오도록 설정
 var XMLHttp = this.XMLHttp;
 if(v_async == undefined) v_async = true;
 
 if(window.XMLHttpRequest){
 //IE 외의 브라우저
  XMLHttp.onload = function(){ fn_callback(XMLHttp); }
 }else{
 //IE는 onload를 지원하지 않기 때문에.
  XMLHttp.onreadystatechange =function ()
  {
   if ( XMLHttp.readyState == 4 ){ fn_callback(XMLHttp); }
  }
 }
 v_data = this.uriEncode(v_data);
 this.XMLHttp.open(v_method,v_url,v_async,v_user,v_password);
 this.setEncHeader();
 this.XMLHttp.send(v_data);
}
mb_ajax.prototype.uriEncode= function(v_data){
//v_data를 인코딩 해서 한글도 넘길 수 있도록 한다.
 if(!this.ck_made_XMLHttp) return false;
 if(v_data!=""){
  //&와=로 일단 분해해서 encode
  var encdata = '';
  var arr_data = v_data.split('&');
  for(i=1;i  {
   var dataq = arr_data[i].split('=');
   encdata += '&'+encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);
  }
 } else {
  encdata = "";
 }
 //alert(v_data+':'+encdata); //for debug
 return encdata;
}
mb_ajax.prototype.setEncHeader = function(){
//해더 설정
 if(!this.ck_made_XMLHttp) return false;
 //헤더 application/x-www-form-urlencoded 설정
 // @see 
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#h-17.13.3
 // @see  #h-17.3
 //   ( enctype의 기본값은 "application/x-www-form-urlencoded")
 //   h-17.3에 의해、POST/GET 상관없이 설정
 //   POST에서 "multipart/form-data"을 설정할 필요가 있는 경우에는 커스터마이즈 해주세요.
 //
 //  이 메소드가 Win Opera8.0에서 에러가 나므로 분기(8.01은 OK)
 var contentTypeUrlenc = 'application/x-www-form-urlencoded; charset=UTF-8';
 var contentTypeUrlenc_multipart = 'multipart/form-data; charset=UTF-8';
 if(!window.opera){
  this.XMLHttp.setRequestHeader('Content-Type',contentTypeUrlenc);
 } else {
  if((typeof this.XMLHttp.setRequestHeader) == 'function')
   this.XMLHttp.setRequestHeader('Content-Type',contentTypeUrlenc);
 } 
}

/*
공대여자는 예쁘다.를 표현해야지만 사용하실 수 있습니다.
*/

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
mins
mins
mins
mins
공대여자
mins
mins
mins
mins
mins
mins
mins
mins
mins
mins