ajax在IE中无法正常测试原因的探索及学习

愚蠢的测试

《JavaScript DOM编程艺术》P116,

问了一下别人,IE需要配置服务器 localhost:8080才能对这个网页有响应。。。需要配置tomcat和Java JDK。配了一晚上!终于搞定了。这里我讨论4种情况。(可以把无服务器的IE当成错误的结果)

1.无服务器测试AJAX时,IE11中无法得出结果,只有空白的页面。(错误原因:

request.open( "GET","example.txt",true );拒绝访问)

服务器中,IE中"Response Received"先于"function Done",响应快。页面正常。

无论是否在服务器中,火狐中的"function Done"都先于"Response Received"。说明响应慢。页面正常。

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

XMLHttpRequest = function(){

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}

return new XMLHttpRequest();

}

2.改成如下,无服务器,IE只弹出”1”,仍然是空白页面。(错误原因:

request.open( "GET","example.txt",true );拒绝访问)

服务器中,IE中弹出顺序为”1”,"Response Received","function Done"。响应快。页面正常。

无论是否在服务器中,火狐的弹出顺序都为”1”,"function Done","Response Received"。响应慢。页面正常。

function getHTTPObject(){

alert("1");  //说明一定会运行到这里

if(typeof XMLHttpRequest == "undefined")

XMLHttpRequest = function(){

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}

return new XMLHttpRequest();

}

或者

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

XMLHttpRequest = function(){

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}

alert("1");   //也能说明一定能运行这里。

return new XMLHttpRequest();

}         //(无错误)

3.改成如下,放在if之后,IE中"Response Received"先于"function Done",说明响应快了。没有弹2,页面正常。

火狐空白页面。

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

alert("2");   //为什么前面无服务器IE无法正常显示这里却可以了??简直就像开了服务器

//一样。

//只要IE的这里没有alert();就没有反应,有就有反应。

//只要火狐这里没有alert();就有反应,和IE相反。这里是关键点。

//认真考虑了一下这句话,好像把if语句终结了,所以下面是个全新的函数,

不会调用是理所当然。另一方面,不会弹出“2”说明了typeof XMLHttpRequest 不等于"undefined"在两个浏览器都是成立的,说明了两个浏览器都支持XMLHttpRequest()函数!

XMLHttpRequest = function(){

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}

return new XMLHttpRequest();

}

4.改成如下,两个浏览器都是空白的,没反应。

只要放在catch(e){}之前:

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

XMLHttpRequest = function(){

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

alert("4");    //错误原因是缺少 ‘catch‘,不能分开的。

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}

return new XMLHttpRequest();

}

或者

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

XMLHttpRequest = function(){

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}alert("5");  //如果alert写在下一行,那么就是第2点的结果,为什么???

//因为分行符就是等于自动添加分号;。所以正确写法应该是};alert("5");

return new XMLHttpRequest();

}

5.改成如下,或者放在其他上述没提到的地方。回到了第1点的结果。说明了什么?

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

XMLHttpRequest = function(){

alert("5");    //说明这里有没有没差别,可能根本没运行这里。结合上面,这个函数typeof XMLHttpRequest == "undefined"是一直不等的,所以这里肯定不运行,直接return newXMLHttpRequest();说明了一个问题IE中typeof XMLHttpRequest 不等于"undefined",但是系统的 XMLHttpRequest();也无法直接运行,需要服务器环境。

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}

return new XMLHttpRequest();

}

7.从测试结果来看,火狐默认拥有自身的服务器,不需要另外搭建

8.IE中"Response Received"一直先于"function Done",响应比函数快。火狐则相反。

(测试中发现响应速度与F12文档模式有关,说明IE默认的edge响应比一般的8快)

所以可以忽略上面的先后顺序。

9.改成如下,IE中弹出”1”,"Response Received","function Done",页面正常

火狐只弹1,空白页面。

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

alert("2");

XMLHttpRequest = function(){

alert("1");           //说明了当上面有alert函数时这里一定会被运行到。

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

return false;

}

return new XMLHttpRequest();

}

10.如下,IE只弹出"Response Received","function Done",页面正常。

但是火狐只弹1,空白页面

function getHTTPObject(){

if(typeof XMLHttpRequest == "undefined")

alert("2");

XMLHttpRequest = function(){

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

alert("1");    //说明火狐会运行到这里,IE不会。

return false;

}

return new XMLHttpRequest();

}

11.总结性的测试。IE中弹出1,5,3,"Response Received","function Done",页面正常。

火狐中弹出1,5,3,4,空白页面。

function getHTTPObject(){

alert("1");

if(typeof XMLHttpRequest == "undefined")

alert("2");

XMLHttpRequest = function(){

alert("3");

try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}

catch(e){}

try{return new ActiveXObject("Msxml2.XMLHTTP");}

catch(e){}

alert("4");   //结合上面,一切都明了了,if语句被终结,两个浏览器都支持XMLHttpRequest(),所以进行最后一步return new XMLHttpRequest();,调用自定义的函数(注意这里的是自定义的XMLHttpRequest()函数,不是系统的,所以IE也能运行了),弹出“3”,然后IE中也支持Msxml2.XMLHTTP.6.0或者其中的一个,所以IE不会进行到弹出“4”这一步,就可以正常地显示页面了。火狐不支持Msxml2.XMLHTTP.6.0或者ActiveXObject(),所以会进行到底,而且没有正确地显示页面。

return false;

}

alert("5");

return new XMLHttpRequest();

}

时间: 2024-11-10 19:05:10

ajax在IE中无法正常测试原因的探索及学习的相关文章

ajax回调函数中使用$(this)取不到对象的解决方法

如果在ajax的回调函数内使用$(this)的话,实践证明,是取不到任何对象的,需要的朋友可以参考下 $(".derek").each(function(){ $(this).click(function(){ var params = $(this).parent().serialize(); var obj=$(this).parent().siblings("div#caskContent"); var form=$(this).parent(); $.aja

jquery.ajax的url中传递中文乱码问题的解决方法

jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1 ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符. JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题. 而我们的UTF-8

在j2ee开发中影响性能的原因以及相关处理性的建议

java是现在比较流行的软件开发语言,同时也是互联网应用中安全性相对较高的一种开发语言了.被很多的电子金融系统开发企业以及电子商务网站建设企业所看重.虽然说在如今的互联网开发中,它比较有优势,然而用得不当的话,反而会使电子商务网站建设的性能受到影响.电子商务网站建设企业,就从多年的java商城开发中说说影响java商城系统和jsp商城效率的原因.    1.缺乏正确的容量规划    容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求.制定合理的容量规划不仅会确保和跟踪当前IT

【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-translator/ "微服务"的概念在 2014 年正式提出之后,越来越多的团队开始用它来设计自己的业务系统,各种微服务框架和开发过程管理方法也同时兴起.不断成熟.微服务设计方法清晰地定义了各个开发团队的业务边界,微服务框架以不同的方式实现了服务之间的协作与集成,根据康威定律我们可以推导这

软件测试中的数据库测试

数据库中数据的基本结构 定义一:数据元素集合(也可称数据对象)中各元素的关系. 定义二:相互之间存在特定关系的数据元素集合. 一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多 字段(数据项)组成数据库测试分类系统测试.集成测试.单元测试.功能测试.性能测试.安全测试系统测试.数据库在初期设计中需要进行分析测试. 对于各种数据元素进行完美融合,并理清相互之间的关系便是数据库结构的基本定义. 在数据库中,不同数据之间会存在既定的特殊关系,其属于各种数据元素

PHP 使用Apache 中的ab 测试网站的压力性能

打开Apache服务器的安装路径(我用的是 WampServer),在bin目录中有一个ab.exe的可执行程序,它就是要介绍的压力测试工具. 在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序.注意直接双击无法正确运行. d:(回车/进入D盘) cd wamp\bin\apache\Apache2.4.4\bin(回车/进入 bin目录) ab(回车/) 如果看到下列一些帮助信息就说明成功启动ab     开始启动ab 压力测试 ab -n 5000 -c 20

Android Day02-Android中单元测试(junit测试)&monkey测试

Android中junit测试有2种实现方式 第1种:一般Android工程的实现方式 1.在清单文件中添加2项内容 首先在AndroidManifest.xml中加入下面红色代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.action" android:versionCode="1"  android:v

如何去除AJAX收到数据中包含的html页面数据

问题: 如下代码所示,我用AJAX收到来自url: 'kzkj_check.jsp',返回的数据msg,总是包含页面的html数据,可是我只想要我返回的数据“false”, $.ajax({ url: 'kzkj_check.jsp', async:false, data: 'un='+ $('#userName').val() +'&pw=' + $('#passWord').val(), type: "get", success: function(msg){ if(msg

vs2010中使用Nunit测试c#代码结果的正确性

http://www.nunit.org/index.php?p=download 上面地址下载,有安装版的,有直接解压版的,只有里面的nunit.framewor.dll就可以做简单的测试了. 安装版的路径默认为:C:\Program Files \NUnit 2.6\bin\framework\nunit.framewor.dll 从vs2010中直接下载安装插件: 安装完后提示重启vs,然后就可以打开用了,在视图中可以打开: 然后写好测试代码之后,就能够看到结果,不对的话会有相应的错误..