/*******************************************************************************
** 用法:
** var mt = new TAjax("WinButton.xml");
** mt.ResponseType = "XML";
** mt.handler = function (vXmlDocument){alert("重载的方法!");}
** mt.exec();
*******************************************************************************/
function TAjax(vURL)
{
this.URL = vURL;
this.XMLHTTP = null;
this.ResponseType = "Text"; //Text/XML
this.exec = function ()
{
if (window.XMLHttpRequest) {
try {
this.XMLHTTP = new XMLHttpRequest();
} catch (e) {
alert("错误: " + e.name + " " + "描述: " + e.message);
return false;
}
} else if (window.ActiveXObject) {
try {
this.XMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
this.XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("错误: " + e.name + " " + "描述: " + e.message);
return false;
}
}
}
if (!this.XMLHTTP) {
alert("不能创建XMLHttpRequest 对象实例.");
return false;
}
/************************************************************************
** For Internet Explorer/Opera
** 对于Internet Explorer/Opera中,在processReqChange方法里面,this引用的是
** XMLHTTP或者XMLHttpRequest对象本身,所以需要给XMLHTTP或者XMLHttpRequest设定
** handler(处理方法)和responseType(返回文档类型),以便于在方法中用this.method()
** 的方式引用。
************************************************************************/
this.XMLHTTP.responseType = this.ResponseType;
this.XMLHTTP.handler = this.handler;
/************************************************************************
** For Mozilla/Firefox
** 对于Firefox,在 XMLHttpRequest对象的processReqChange方法里面,this引用的是
** processReqChange方法本身,所以需要把processReqChange方法作为一个Object,另外
** 赋值,设定好handler(处理方法),responseType(返回文档类型),以便于能在方法中用
** this.method()的方式引用。
** 另外,还需要多设定一个对于XMLHttpRequest对象本身的引用,因为在processReqChange
** 方法中this是processReqChange本身,无法直接引用到XMLHttpRequest对象。
**
** this.processReqChange.XMLHTTP = this.XMLHTTP;
** this.processReqChange.handler = this.handler;
** this.processReqChange.responseType = this.ResponseType;
**
** 当然,最好的办法是用Firefox支持的addEventListener方法捕获processReqChange事件
************************************************************************/
if (typeof(this.XMLHTTP.addEventListener) == "function") {
this.XMLHTTP.addEventListener("load", this.processReqChange, false);
} else {
this.XMLHTTP.onreadystatechange = this.processReqChange;
}
this.XMLHTTP.open("GET", this.URL, true);
this.XMLHTTP.send(null);
}
this.handler = function (vXmlDocument)
{
alert(vXmlDocument);
}
this.processReqChange = function ()
{
var XMLHTTP = this.XMLHTTP ? this.XMLHTTP : this;
if (XMLHTTP.readyState == 4) {
if (XMLHTTP.status == 200) {
this.handler(this.responseType == "XML" ? XMLHTTP.responseXML : XMLHTTP.responseText);
} else {
alert("在接收XML文档时发生错误,代码如下: " + XMLHTTP.status + " " + XMLHTTP.responseText);
return false;
}
}
}
}