AJAX Sample( AJAX Class )

07 22, 2007 10:49

XMLHttpRequest Class

서버와의 통신을 수행하는 XMLHttpRequest 객체를 생성하기 위해서는 ajax.js 파일을 포함하고 사용한다. 사용법은 다음과 같다. 

<script language="javascript" type="text/javascript" src=ajax.js"></script>

- ajax.js

var AJAX = {
XmlHttp: null,
create: function ()
{
if ( window.XMLHttpRequest )// branch for native XMLHttpRequest object
{
try
{
AJAX.XmlHttp = new XMLHttpRequest();
// 일부의 모질라 버전을은 readyState property, onreadystate event
// 를 지원하지 않으므로. - from xmlextrs
if ( this.XmlHttp.readyState == null )
{
this.XmlHttp.readyState = 1;
this.XmlHttp.addEventListener("load", function () {
this.XmlHttp.readyState = 4;
if ( typeof this.XmlHttp.onreadystatechange == "function" )
tmpXmlHtp.onreadystatechange();
}, false);
}
}
catch(e)
{
AJAX.XmlHttp = false;
alert("Your browser does not support XmlHttp objects");
}
}
else if ( window.ActiveXObject )// branch for IE/Windows ActiveX version
{
try
{
AJAX.XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
AJAX.XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
AJAX.XmlHttp = false;
alert("Your browser does not support XmlHttp objects");
}
}
}
}
}
 
AJAX.openXML = function ( method, url, async, uname, pswd )
{
if ( AJAX.XmlHttp != null )
{
if ( uname == undefined )
{
AJAX.XmlHttp.open( method, url, async );
}
else
{
AJAX.XmlHttp.open( method, url, async, uname, pswd );
}
AJAX.XmlHttp.onreadystatechange = function ()
{
if ( AJAX.XmlHttp.readyState == 4 )
{
if ( AJAX.XmlHttp.status == 200 )
{ // 200 은 HTTP에서 성공 i.e) 404 : not found
AJAX.statusSuccessHandler( AJAX.XmlHttp.responseXML.xml );
}
else
{
AJAX.statusErrorHandler();
alert('Error while loading!');
}
}
}
}
else
{
alert("need to create xmlhttp object");
}
}
 
AJAX.openText = function ( method, url, async, uname, pswd )
{
if ( AJAX.XmlHttp != null )
{
if ( uname == undefined )
{
AJAX.XmlHttp.open( method, url, async );
}
else
{
AJAX.XmlHttp.open( method, url, async, uname, pswd );
}
AJAX.XmlHttp.onreadystatechange = function ()
{
if ( AJAX.XmlHttp.readyState == 4 )
{
if ( AJAX.XmlHttp.status == 200 )
{ // 200 은 HTTP에서 성공 i.e) 404 : not found
AJAX.statusSuccessHandler( AJAX.XmlHttp.responseText );
}
else
{
AJAX.statusErrorHandler();
alert('Error while loading!');
}
}
}
}
else
{
alert("need to create xmlhttp object");
}
}
 
AJAX.send = function ( content )
{
if ( content == undefined )
AJAX.XmlHttp.send( null );
else
AJAX.XmlHttp.send( content );
}
 
AJAX.setOnReadyStateChange = function ( funcname )
{
if ( AJAX.XmlHttp )
{
AJAX.XmlHttp.onreadystatechange = funcname;
}
else
{
alert ("need to create xmlhttp object");
}
}
 
// status 200 일 때 처리 함수
AJAX.statusSuccessHandler = function ( data )
{
//alert(data);
}
 
// status 200 일 때 기본 처리 함수
// setStatusSuccessHandler() 로 대체 가능
AJAX.statusErrorHandler = function ( status )
{
AJAX.rtnText = AJAX.XmlHttp.responseText;
}
 
AJAX.setStatusSuccessHandler = function ( funcname )
{
AJAX.statusSuccessHandler = funcname;
}
 
AJAX.setStatusErrorHandler = function ( funcname )
{
AJAX.statusErrorHandler = funcname;
}
 
AJAX.setRequestHeader = function ( label, value )
{
AJAX.XmlHttp.setRequestHeader( label, value );
}
 
AJAX.formData2QueryString = function ( docForm )
{
var submitContent = '';
var formElem;
var lastElemName = '';
for( i = 0; i < docForm.elements.length; i++ )
{
formElem = docForm.elements[i];
switch( formElem.type )
{
// Text fields, hidden form elements
case 'text':
case 'hidden':
case 'password':
case 'textarea':
case 'select-one':
submitContent += formElem.name + '=' + escape(formElem.value) + '&'
break;
// Radio buttons
case 'radio':
if ( formElem.checked )
{
submitContent += formElem.name + '=' + escape(formElem.value) + '&'
}
break;
// Checkboxes
case 'checkbox':
if ( formElem.checked )
{
// Continuing multiple, same-name checkboxes
if ( formElem.name == lastElemName )
{
// Strip of end ampersand if there is one
if ( submitContent.lastIndexOf('&') == submitContent.length - 1 )
{
submitContent = submitContent.substr(0, submitContent.length - 1);
}
// Append value as comma-delimited string
submitContent += ',' + escape(formElem.value);
}
else
{
submitContent += formElem.name + '=' + escape(formElem.value);
}
submitContent += '&';
lastElemName = formElem.name;
}
break;
}
}
// Remove trailing separator
submitContent = submitContent.substr(0, submitContent.length - 1);
return submitContent;
}
 
// 사용법
// AJAX.create();
// AJAX.openText('GET','jsontest.php', true);
// AJAX.setStatusSuccessHandler(proc);
// AJAX.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
// AJAX.send("test=테스트");
//
// function proc(abc)
// {
//document.getElementById('test').innerHTML = abc;
// }

브니 Programs/Ajax

07 22, 2007 10:49 07 22, 2007 10:49
Trackback Address:http://limcom.co.kr/blog/trackback/91
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다