不知道我的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
}
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
}
{
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;
}
来我给你解决掉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); }
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());
}
}
只需要判断 if (window.XMLHttpRequest){ //支持FireFox
this.req=new XMLHttpRequest();
} else if (window.ActiveXObject){ //支持IE
this.req=new ActiveXObject("Microsoft.XMLHTTP");
}
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(); }
谢谢,我好好研究下..
to xiaofan_sap:我一般情况下也是你这么写,但是这个IE7不行..多判断几个也是为了多兼容几个浏览器.不兼容的话,主要功能就显示不出来了..
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();
}
上午测了下 奇怪的发现: 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为空'.