不知道我的IE有问题还是怎么了,这个方法就是不行..
function GetXmlHttpObj()
{
var XmlHttpObj = null;
try

/**  这个也不行
if(window.ActiveXObject)

for(var i = 6;i;i--)

try
{
if( i == 2 )

XmlHttpObj = new ActiveXObject( "Microsoft.XMLHTTP" ); 
}
else

XmlHttpObj = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" ); 

XmlHttpObj.setRequestHeader("Content-Type","text/xml"); 
XmlHttpObj.setRequestHeader("Content-Type","utf-8"); 
break;
}
catch(e)
{}
}
}
else if( window.XMLHttpRequest )

XmlHttpObj = new XMLHttpRequest(); 
if (XmlHttpObj.overrideMimeType) 
{
XmlHttpObj.overrideMimeType('text/xml');
}
}
**/
       if(window.ActiveXObject){
            var ieArr=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP","Microsoft.XMLHTTP"];               
            for(var i=0;i<ieArr.length;i++)
                {
                var xmlhttp= new ActiveXObject(ieArr[i]);
                }
                return xmlhttp;
       } else if(window.XMLHttpRequest){
               return new XMLHttpRequest();
            }       
}
catch(e)
{}
return XmlHttpObj
}

解决方案 »

  1.   

    function GetXmlHttpObject()
    {
      var xmlHttp=null;
      try
        {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
        }
      catch (e)
        {
        // Internet Explorer
        try
          {
          xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
          }
        catch (e)
          {
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        }
      return xmlHttp;
    }
      

  2.   

    to gkw521 :IE 下"Msxml2.XMLHTTP","Microsoft.XMLHTTP"  这两个能兼容所有版本了吗.
      

  3.   

    不冷清啊,很热闹的
    来我给你解决掉Msxml2.XMLHTTP","Microsoft.XMLHTTP不一定能兼容所有版本的.另外你不用重复这么多判断..
    IE下这样就好了
      function createXMLHTTP() {
                    
                        var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
                                             "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
                                             "Microsoft.XMLHTTP"];
                                             
                        for (var i=0; i < arrSignatures.length; i++) {
                            try {
                            
                                var oRequest = new ActiveXObject(arrSignatures[i]);
                                
                                return oRequest;
                            
                            } catch (oError) {
                                //ignore
                            }
                        }          
                    
                        throw new Error("MSXML is not installed on your system.");               
                    }
                    
                    function getServerInfo() {
                            var oRequest = createXMLHTTP();
                            oRequest.open("get", "url", true);/*你自己的url*/
                            oRequest.onreadystatechange = function () {
                                    if (oRequest.readyState == 4) {
                                    alert("Status is " + oRequest.status + " (" + oRequest.statusText + ")");
                                    alert("Response text is: " + oRequest.responseText);
                                }
                            }
                            oRequest.send(null);                }
      

  4.   

    给你一个我自己用的ajax请求结构,基本支持所有浏览器,有不明白的地方就问我吧
    var net=new Object();net.READY_STATE_UNINITIALIZED=0;
    net.READY_STATE_LOADING=1;
    net.READY_STATE_LOADED=2;
    net.READY_STATE_INTERACTIVE=3;
    net.READY_STATE_COMPLETE=4;
    /*--- content loader object for cross-browser requests ---*/
    net.ContentLoader=function(url,onload,onerror,method,params,contentType){
        this.req=null;
        this.onload=onload;
        this.onerror=(onerror) ? onerror : this.defaultError;
        this.loadXMLDoc(url,method,params,contentType);
    }net.ContentLoader.prototype={
        loadXMLDoc:function(url,method,params,contentType){
            if (!method){
                method="GET";
            }
            if (!contentType && method=="POST"){
                contentType='application/x-www-form-urlencoded';
            }
            if (window.XMLHttpRequest){
                this.req=new XMLHttpRequest();
            } else if (window.ActiveXObject){
                this.req=new ActiveXObject("Microsoft.XMLHTTP");
            }
            if (this.req){
                try{
                    var loader=this;
                    this.req.onreadystatechange=function(){
                        loader.onReadyState.call(loader);
                    }
                    this.req.open(method,url,true);
                    if (contentType){
                        this.req.setRequestHeader('Content-Type', contentType);
                    }
                    this.req.send(params);
                }catch (err){
                    this.onerror.call(this);
                }
            }
        },    onReadyState:function(){
            var req=this.req;
            var ready=req.readyState;
            var httpStatus=req.status;
            if (ready==net.READY_STATE_COMPLETE){
                if (httpStatus==200 || httpStatus==0){
                    this.onload.call(this);
                }else{
                    this.onerror.call(this);
                }
            }
        },    defaultError:function(){
            alert("error fetching data!"
                +"\n\nreadyState:"+this.req.readyState
                +"\nstatus: "+this.req.status
                +"\nheaders: "+this.req.getAllResponseHeaders());
        }
    }
      

  5.   

    你写的请求中盲目的判断太多
    只需要判断 if (window.XMLHttpRequest){  //支持FireFox
                this.req=new XMLHttpRequest();
            } else if (window.ActiveXObject){ //支持IE
                this.req=new ActiveXObject("Microsoft.XMLHTTP");
            }
      

  6.   

    怎么用这么多判断啊  一般的就这样写就可以了
    var xmlHttp;function validateEmail() {   var email = document.getElementById("email");   var url = "validate?email=" + escape(email.value);   if (window.ActiveXObject) {     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");   }   else if (window.XMLHttpRequest) {     xmlHttp = new XMLHttpRequest();   }
      

  7.   

    to BeenZ:
    谢谢,我好好研究下..
    to xiaofan_sap:我一般情况下也是你这么写,但是这个IE7不行..多判断几个也是为了多兼容几个浏览器.不兼容的话,主要功能就显示不出来了..
      

  8.   

    不是这样的,LZ,一般现在主要兼容问题就在IE,FF,你只需要根据这2个浏览器的支持来判断就行了的,当然也有特殊情况
      

  9.   

    2个问题
    1. try...catch应写在for循环内
    2. return也最好写在for循环内,否则相当于每次返回的都是new ActiveXObject("Microsoft.XMLHTTP"),又因为没有try...catch,从高版本的Msxml2.XMLHTTP.6.0开始创建时可能导致创建失败if(window.ActiveXObject){
                var ies=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
                for(var i=0;i<ies.length;i++){
                    try{
                        return new ActiveXObject(ies[i]);//从较高版本创建以取得较好的性能
                    }catch(e){}
                }
            }
            else if(window.XMLHttpRequest){
                return new XMLHttpRequest();
            }
      

  10.   

    下班后没电脑,晚上就没测试了.
    上午测了下 奇怪的发现:  var xmlHttp=null;
                   alert("1");   
      
      
        if(window.ActiveXObject)
            { 
                alert("activeX");
                for(var i = 6;i;i--)
                { 
                    try
                    {
                        if( i == 2 )
                        { 
                            xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" ); 
                        }
                        else
                        { 
                            xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" ); 
                        } 
                        xmlHttp.setRequestHeader("Content-Type","text/xml"); 
                        xmlHttp.setRequestHeader("Content-Type","utf-8"); 
                        break;
                    }
                    catch(e)
                    {
                        alert(i);
                        if(i==1){
                        xmlHttp = new XMLHttpRequest(); 
                        }
                    }
                }
            }
            else if( window.XMLHttpRequest )
            { 
                xmlHttp = new XMLHttpRequest(); 
                if (xmlHttp.overrideMimeType) 
                {
                    xmlHttp.overrideMimeType('text/xml');
                }
            }     if(xmlHttp!=null){
             return xmlHttp;
         }else{
            alert("xmlHttp为空");
         }
    出来对话框的顺序居然是,1, ActiveX ,6,5,4,3,2,1 ,然后执行下去了.注释了catch 里 if 的内容,就出来 xmlhttp为空'.
      

  11.   

    也就是说,这个IE7 也是用 xmlHttp = new XMLHttpRequest(); 来实例化的.
      

  12.   

    所以2楼的方法 不判断 是IE还有FF 可以,其它判断了的就不行了..
      

  13.   

    用jquery中的ajax,又简单又方便。也不需要考虑浏览器的兼容性。。