jquery $.ajax运行不正常我的调试

今天用jquery  $.ajax 发送请求,发现老是不成功,在百度和google上搜索信息,发现大部分原因是由于ie6,ie7,ie8,firefox中关于创建xmlhttprequest对象的问题,还说是由于浏览器内置native xmlhttprequest支持原因造成,关于这个问题我们可以通过修改jquery的源代码来完成.

jquery 1.3.2

xhr:function(){
  return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); //源代码部分

可以修改为

return window.XMLHttpRequest? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

当然网上还有一些别的建议,比如

 方法一:

var xmlHttp;
if(window.XMLHttpRequest){

//针对Firefox, Mozillar, Opera, Safari, IE7, IE8
            xmlHttp=new XMLHttpRequest();
           if (xmlhttp.overrideMimeType)
                 xmlhttp.overrideMimeType("text/xml");
}
else if(window.ActiveXObject)
{
try{
//Firefox, Opera 8.0+, Safari
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
//Internet Explorer
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
xmlHttp = false;
}
}
}
return xmlHttp;

 

方法二:

try{
        if( window.ActiveXObject ){
            for( var i = 5; i; i-- ){
                try{
                    if( i == 2 ){
xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" );   
                    }else{
xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );   
                    }
xmlhttp_request.setRequestHeader("Content-Type","text/xml");
xmlhttp_request.setRequestHeader("Content-Type","gb2312");
break;}
                catch(e){                       
                    xmlhttp_request = false;
                }
            }
        }else if( window.XMLHttpRequest ){
            xmlhttp_request = new XMLHttpRequest();
            if (xmlhttp_request.overrideMimeType) {
                xmlhttp_request.overrideMimeType(''text/xml'');
            }
        }
    }catch(e){
        xmlhttp_request = false;
    }

总而言之,一定要根据浏览器的对应方式来创建:

常见的浏览器判断方式是

if (window.XMLHttpRequest) { //Mozilla, Safari,IE7,IE8
    alert('Mozilla, Safari,IE7,IE8 ');
    if(!window.ActiveXObject){ // Mozilla, Safari,
       alert('Mozilla, Safari');
    } else {
       alert('IE7,IE8');
    }
} else {
    alert('IE6');
}

我们一定要了解这样写的原因,总而言之就是一定要根据浏览器方式来创建xmlhttprequest对象。

第二个问题:直接在vs2008环境中调试ie8,ie7 $.ajax总是报错,将整个网站部署到iis中,$.ajax运行正常,如果大家实在无法解决这个问题,可以进行部署尝试。

posted @ 2010-08-09 17:50  老高dotnet实践  阅读(2056)  评论(3编辑  收藏  举报