[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}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
4.28
4.29
4.30
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.11
5.12
5.13
5.15
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
6.1