原生XMLHttpRequest

/*******************************************************************************  

** 用法:  

** 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;   

            }   

        }   

    }   

}   

原文地址:https://www.cnblogs.com/qffxj/p/10131185.html