不同浏览器创建XMLHttpRequest方法有什么不同


Posted in 面试题 onNovember 17, 2014
XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。后来Mozilla﹑Netscape﹑Safari 和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。
对于Internet Explorer浏览器:
xmlhttp_request = new ActiveXObject(“Msxml2.XMLHTTP.3.0″); //3.0或4.0, 5.0
xmlhttp_request = new ActiveXObject(“Msxml2.XMLHTTP”);
xmlhttp_request = new ActiveXObject(“Microsoft.XMLHTTP”);
由于在不同Internet Explorer浏览器中XMLHTTP版本可能不一致,为了更好的兼容不同版本的Internet Explorer浏览器,因此我们需要根据不同版本的Internet Explorer浏览器来创建XMLHttpRequest类,上面代码就是根据不同的Internet Explorer浏览器创建XMLHttpRequest类的方法。
对于Mozilla﹑Netscape﹑Safari等浏览器
创建XMLHttpRequest 方法如下:xmlhttp_request = new XMLHttpRequest();
如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作。 为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该header。
xmlhttp_request = new XMLHttpRequest();
xmlhttp_request.overrideMimeType(‘text/xml’);
在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:
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(“Charset”,”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; }
发送请求了
可以调用HTTP请求类的open()和send()方法,如下所示:
xmlhttp_request.open(‘GET’, URL, true);
xmlhttp_request.send(null);
open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。
第二个参数是请求页面的URL。
第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是”AJAX”中的”A”。
服务器的响应
这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:
xmlhttp_request.onreadystatechange =FunctionName;
FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如:
xmlhttp_request.onreadystatechange = function(){
// JavaScript代码段
};
首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。
readyState的取值如下:
0 (未初始化)
1 (正在装载)
2 (装载完毕)
3 (交互中)
4 (完成)
所以只有当readyState=4时,一个完整的服务器响应已经收到了,函数才可以处理该响应。具体代码如下:
if (http_request.readyState == 4) { // 收到完整的服务器响应 }
else { // 没有收到完整的服务器响应 }
当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。
处理从服务器得到的数据
有两种方式可以得到这些数据:
(1) 以文本字符串的方式返回服务器的响应
(2) 以XMLDocument对象方式返回响应

Tags in this post...

面试题 相关文章推荐
PHP中如何使用Cookie
Oct 28 面试题
运行时异常与一般异常有何异同?
Jan 05 面试题
统计每一学生的平均成绩
Jun 06 面试题
ORACLE十问
Apr 20 面试题
写一个在SQL Server创建表的SQL语句
Mar 10 面试题
2019史上最全Database工程师题库
Dec 06 面试题
.NET remoting的两种通道是什么
May 31 面试题
实体的生命周期
Aug 31 面试题
MYSQL基础面试题
May 13 面试题
介绍一下Mysql的存储引擎
Feb 12 面试题
关键字throw与throws的用法差异
Nov 22 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
Nov 30 面试题
什么是Remote Module
Jun 10 #面试题
AJAX的全称是什么
Nov 06 #面试题
Prototype是怎么扩展DOM的
Oct 01 #面试题
GWT都有什么特性
Dec 02 #面试题
JavaScript获取当前url根目录(路径)
Feb 19 #面试题
ajax是什么及其工作原理
Feb 08 #面试题
Ajxa常见问题都有哪些
Mar 26 #面试题
You might like
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
php的debug相关函数用法示例
2016/07/11 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中实现常量(Const)功能
2015/01/28 Python
如何在python中使用selenium的示例
2017/12/26 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
OpenCV 模板匹配
2019/07/10 Python
解决os.path.isdir() 判断文件夹却返回false的问题
2019/11/29 Python
python生成任意频率正弦波方式
2020/02/25 Python
Python通过2种方法输出带颜色字体
2020/03/02 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
Python sublime安装及配置过程详解
2020/06/29 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2014年林业工作总结
2014/12/05 职场文书
大学生求职意向书
2015/05/11 职场文书
Python 如何实现文件自动去重
2021/06/02 Python
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android
详解Python中__new__方法的作用
2022/03/31 Python