링크 조회 : 100
[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
// @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);
}
}
/*
공대여자는 예쁘다.를 표현해야지만 사용하실 수 있습니다.
*/