﻿function CreateMsXmlHttp() {
    var xmlHttp = null;
    var clsids = ["MSXML2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0",
        "Msxml2.XMLHTTP.2.6", "Msxml2.XMLHTTP.1.0", "Microsoft.XMLHTTP.1", "Microsoft.XMLHTTP"];
    for (var i = 0; i < clsids.length; i++) {
        try {
            xmlHttp = new ActiveXObject(clsids[i]);
            return xmlHttp;
        }
        catch (e) { }
    }
    throw new Error("unsuccessful to create XmlHttp ActiveXObject.");
}

function GetXmlHttp() {
    var xmlHttp = null;
    if (window.XMLHttpRequest) { //Mozilla 浏览器
        xmlHttp = new XMLHttpRequest();
        if (xmlHttp.overrideMimeType) {//设置MIME类别
            xmlHttp.overrideMimeType("text/xml");
        }
    }
    else if (window.ActiveXObject) {
        xmlHttp = CreateMsXmlHttp();
    }
    return xmlHttp;
}


//Ajax类 
//url发送地址; recvT接受数据类型 0为xml 1为text 2Json; resultF返回结果处理函数;
//使用方法
//var classajax = new Ajax(url, recvT, stringS, resultF);
//classajax.post();//post方式发送数据
//classajax.get();//get方式发送数据

function Ajax(loadingobj, loadinginfo, url, recvT, stringS, resultF) {
    this.loadingobj = loadingobj;
    this.loadinginfo = loadinginfo;
    this.url = url;
    this.recvT = recvT;
    this.stringS = stringS;
    this.xmlHttp = this.createXMLHttpRequest();
    if (this.xmlHttp == null) {
        alert("unsuccessful to create xmlHttp object!");
        return;
    }
    var objxml = this.xmlHttp;
    objxml.onreadystatechange = function() { Ajax.handleStateChange(loadingobj, loadinginfo, objxml, recvT, resultF) };
}

Ajax.prototype.createXMLHttpRequest = function() {
    return GetXmlHttp();
}

Ajax.prototype.createQueryString = function() {
    var queryString = this.stringS;
    return queryString;
}

Ajax.prototype.get = function() {
    url = this.url;
    var queryString = url + "?timeStamp=" + new Date().getTime() + "&" + this.createQueryString();
    this.xmlHttp.open("GET", queryString, true);
    this.xmlHttp.send(null);
}

Ajax.prototype.post = function() {
    url = this.url;
    var url = url + "?timeStamp=" + new Date().getTime();
    var queryString = this.createQueryString();

    this.xmlHttp.open("POST", url, true);

    if (queryString != "") {
        if (this.recvT == 2)
            this.xmlHttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        else
            this.xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        this.xmlHttp.send(queryString);
    }
    else
        this.xmlHttp.send(null);
}

Ajax.handleStateChange = function(loadingobj, loadinginfo, xmlHttp, recvT, resultF) {

    if (loadingobj != null) {
        switch (xmlHttp.readyState) {
            case 1:
                loadingobj.innerHTML = loadinginfo;
                break;
            case 2:
                loadingobj.innerHTML = loadinginfo;
                break;
            case 3:
                loadingobj.innerHTML = loadinginfo;
                break;
            case 4:
                loadingobj.innerHTML = "";
                break;
        }
    }
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            resultF((recvT == 0) ? xmlHttp.responseXML : xmlHttp.responseText);
        } else {
            //alert("ajax function fail.");
        }
    }
}
