每次在进行XMLHttpRequest的时候都写代码去创建,会比较麻烦,所以将创建XmlHttpRequest对象的代码封装成一个函数,并使他支持IE和FireFox,下面是函数的代码:
// get xmlhttprequest object
function getXMLRequester(charSet)
{
var xmlhttp_request = false ;
try
{
if ( window.ActiveXObject ) // IE
{
for ( var i = 5 ; i; i -- )
{
try
{
if ( i == 2 )
{
xmlhttp_request = new ActiveXObject( " Microsoft.XMLHTTP " );
}
else
{
xmlhttp_request = new ActiveXObject( " Msxml2.XMLHTTP. " + i + " .0 " );
xmlhttp_request.setRequestHeader( " Content-Type " , " text/xml " );
if ((charSet != null ) && (charSet != "" ))
{
xmlhttp_request.setRequestHeader( " Content-Type " ,charSet);
}
}
break ;
}
catch (e)
{
xmlhttp_request = false ;
}
}
}
else if ( window.XMLHttpRequest ) // FireFox
{
xmlhttp_request = new XMLHttpRequest();
if (xmlhttp_request.overrideMimeType)
{
xmlhttp_request.overrideMimeType( ' text/xml ' );
}
}
}
catch (e)
{
xmlhttp_request = false ;
}
return xmlhttp_request ;
}
// get xmlhttprequest object
function getXMLRequester(charSet)
{
var xmlhttp_request = false ;
try
{
if ( window.ActiveXObject ) // IE
{
for ( var i = 5 ; i; i -- )
{
try
{
if ( i == 2 )
{
xmlhttp_request = new ActiveXObject( " Microsoft.XMLHTTP " );
}
else
{
xmlhttp_request = new ActiveXObject( " Msxml2.XMLHTTP. " + i + " .0 " );
xmlhttp_request.setRequestHeader( " Content-Type " , " text/xml " );
if ((charSet != null ) && (charSet != "" ))
{
xmlhttp_request.setRequestHeader( " Content-Type " ,charSet);
}
}
break ;
}
catch (e)
{
xmlhttp_request = false ;
}
}
}
else if ( window.XMLHttpRequest ) // FireFox
{
xmlhttp_request = new XMLHttpRequest();
if (xmlhttp_request.overrideMimeType)
{
xmlhttp_request.overrideMimeType( ' text/xml ' );
}
}
}
catch (e)
{
xmlhttp_request = false ;
}
return xmlhttp_request ;
}
将以上代码另存为js/Ajax.js,测试该函数的代码如下:
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
< head >
< title > Check 163 ID </ title >
< script language ="javascript" src ="js/Ajax.js" type ="text/javascript" ></ script >
< script language ="javascript" type ="text/javascript" >
function IDRequest(n)
{
// 定义收到服务器的响应后需要执行的JavaScript函数
url = n + document.getElementById( ' 163id ' ).value; // 定义网址参数
xmlhttp_request = getXMLRequester(); // 调用创建XMLHttpRequest的函数
xmlhttp_request.onreadystatechange = doContents; // 调用doContents函数
try
{
xmlhttp_request.open( ' GET ' , url, true );
}
catch (ex)
{
alert(ex);
}
xmlhttp_request.send( null );
}
function doContents()
{
if (xmlhttp_request.readyState == 4 )
{
// 收到完整的服务器响应
if (xmlhttp_request.status == 200 )
{
// HTTP服务器响应的值OK
document.getElementById( ' message ' ).innerHTML = xmlhttp_request.responseText; // 将服务器返回的字符串写到页面中ID为message的区域
}
else
{
alert(http_request.status);
}
}
}
</ script >
</ head >
< body >
< input type ="text" id ="163id" />
< input type ="button" value ="校验" onclick ="IDRequest('http://reg.163.com/register/checkssn.jsp?username=')" />
< div id ="message" ></ div >
</ body >
</ html >
< head >
< title > Check 163 ID </ title >
< script language ="javascript" src ="js/Ajax.js" type ="text/javascript" ></ script >
< script language ="javascript" type ="text/javascript" >
function IDRequest(n)
{
// 定义收到服务器的响应后需要执行的JavaScript函数
url = n + document.getElementById( ' 163id ' ).value; // 定义网址参数
xmlhttp_request = getXMLRequester(); // 调用创建XMLHttpRequest的函数
xmlhttp_request.onreadystatechange = doContents; // 调用doContents函数
try
{
xmlhttp_request.open( ' GET ' , url, true );
}
catch (ex)
{
alert(ex);
}
xmlhttp_request.send( null );
}
function doContents()
{
if (xmlhttp_request.readyState == 4 )
{
// 收到完整的服务器响应
if (xmlhttp_request.status == 200 )
{
// HTTP服务器响应的值OK
document.getElementById( ' message ' ).innerHTML = xmlhttp_request.responseText; // 将服务器返回的字符串写到页面中ID为message的区域
}
else
{
alert(http_request.status);
}
}
}
</ script >
</ head >
< body >
< input type ="text" id ="163id" />
< input type ="button" value ="校验" onclick ="IDRequest('http://reg.163.com/register/checkssn.jsp?username=')" />
< div id ="message" ></ div >
</ body >
</ html >
从代码的运行结果看,在IE下会收到提示,在FireFox下无法运行(permission denied to call method XMLHttpRequest.open),这是出于安全考虑,禁止了XMLHttpRequest跨站访问的结果,下面一篇文章将讨论如何解决XMLHttpRequest跨站访问问题