﻿// JScript 文件

//调用示例：
//<script language="javascript" type="text/javascript" src="xmlhttp.js"></script>
//XMLHttp.setHtml('GET','http://URL/','',true,'gb2312',document.getElementById("Div1"));

//setHtml(method, url, data, byAsyn,charcode, DOMObj)方法：获取目标的Text并绑定HTML元素；
//method：方法[post,get]；url：目标地址；data：发送数据；
//byAsyn：是否采用异步模式[false,true]；charcode：字符编码；DOMObj：具有innerHTML属性的HTML元素。


//定义 XMLHttp 池；
var XMLHttp = {
    xmlHttpsPool:new Array(),  //XMLHttpRequest池；
    getxmlHttp:function(){      //获取一个有效的 XMLHttpRequest ；
        for(var i=0;i<this.xmlHttpsPool.length;i++){
//            if(this.xmlHttpsPool[i].readyState==0||this.xmlHttpsPool[i].readyState==4){                
//                return this.xmlHttpsPool[i];
//            }  
            if (this.xmlHttpsPool[i] = null ){
                this.xmlHttpsPool[i] = this.getNewHttprequest() ;
                return this.xmlHttpsPool[i];
            }  
        }
        //没有空闲的XMLHttpRequest，新建一个；
        
        this.xmlHttpsPool[this.xmlHttpsPool.length] = this.getNewHttprequest() ; 
        return this.xmlHttpsPool[this.xmlHttpsPool.length-1];       
    },
    
    //setHtml(method, url, data, byAsyn,charcode, DOMObj)方法：获取目标的Text并绑定HTML元素；
    //method：方法[post,get]；url：目标地址；data：发送数据；
    //byAsyn：是否采用异步模式[false,true]；charcode：字符编码；DOMObj：具有innerHTML属性的HTML元素。
    setHtml:function(method, url, data, byAsyn,charcode, DOMObj){
        var objXMLHttp = this.getxmlHttp();
        
        if(objXMLHttp == null){//不支持XMLHttpRequest。
            DOMObj.innerHTML = '<iframe allowtransparency="true" frameborder="no" width="100%" height="100%" src="' 
                + url + '"marginheight="0" marginwidth="0" scrolling="no" ></iframe>';         
        }else{//支持    
//            if (method==null){method="GET";}
//            if (charcode==null){method="UTF-8";}      
            with(objXMLHttp){
                try{// 加随机数防止缓存
                    if (url.indexOf("?") > 0){url += "&randnum=" + Math.random();
                    }else{url += "?randnum=" + Math.random();}
                    
                    //alert(url);
                                       
                    onreadystatechange = function (){
                        //alert(objXMLHttp.readyState);
                        //判断是否是完成状态
                        if (objXMLHttp.readyState == 4){
                            //判断是否执行成功
                            if (objXMLHttp.status == 200 || objXMLHttp.status == 304){
                                //更新页面上的某元素                                
                                DOMObj.innerHTML = objXMLHttp.responseText ;
                            }else{
                                DOMObj.innerHTML = "HTML Eorr:" + objXMLHttp.status ;
                            }
                            objXMLHttp = null;
                        }else if(objXMLHttp.readyState == 0){DOMObj.innerHTML = "<font color='green'>正在载入数据……1%</font>";
                        }else if(objXMLHttp.readyState == 1){DOMObj.innerHTML = "<font color='green'>正在载入数据……25%</font>";
                        }else if(objXMLHttp.readyState == 2){DOMObj.innerHTML = "<font color='green'>正在载入数据……50%</font>";
                        }else if(objXMLHttp.readyState == 3){DOMObj.innerHTML = "<font color='green'>正在载入数据……75%</font>";}
                    }
                    objXMLHttp.open(method, url, byAsyn);                    
                    // 设定请求编码方式
                    setRequestHeader('Content-Type', 'text/html;charset=' + charcode ); 
                    setRequestHeader('Cache-Control', 'No-Cache' );
                    //alert(method + url + byAsyn);
                    send(data);
                }catch(e){DOMObj.innerHTML ="<font color='red'>" + e.name + ":" + e.message + "</font>";}
            }
        }
   
    },
    //新建一个XMLHttpRequest。
    getNewHttprequest:function(){
        if (window.XMLHttpRequest){
            var objXMLHttp = new XMLHttpRequest();
        }else{
            var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 
                'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
            for(var n = 0; n < MSXML.length; n ++){
                try{
                    var objXMLHttp = new ActiveXObject(MSXML[n]);
                    break;
                }catch(e){}
            }
        }
        // mozilla某些版本没有readyState属性
        if (objXMLHttp.readyState == null){
            objXMLHttp.readyState = 0;
            objXMLHttp.addEventListener("load", function(){
                objXMLHttp.readyState = 4;
                if (typeof objXMLHttp.onreadystatechange == "function"){
                    objXMLHttp.onreadystatechange();
                }
            },  false);
        }
        return objXMLHttp ;
    }
};

