不同浏览器创建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...

面试题 相关文章推荐
什么是smarty? Smarty的优点是什么?
Aug 11 面试题
JDO的含义
Nov 17 面试题
枚举与#define宏的区别
Apr 30 面试题
如何查找和删除数据库中的重复数据
Nov 05 面试题
名词解释型面试题(主要是网络)
Dec 27 面试题
.net C#面试题
Aug 28 面试题
几个Shell Script面试题
Aug 31 面试题
十一个高级MySql面试题
Oct 06 面试题
为什么Runtime.exec(“ls”)没有任何输出?
Oct 03 面试题
什么是抽象
Dec 13 面试题
Java基础类库面试题
Sep 04 面试题
Tomcat的缺省是多少,怎么修改
Apr 09 面试题
什么是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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
永不消失的title提示代码
2007/02/15 Javascript
jqPlot Option配置对象详解
2009/07/25 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
对Django外键关系的描述
2019/07/26 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
python numpy库np.percentile用法说明
2020/06/08 Python
Python自动创建Excel并获取内容
2020/09/16 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
公司节能减排倡议书
2014/05/14 职场文书
2014年教务工作总结
2014/12/03 职场文书
检讨书范文2000字
2015/01/28 职场文书
具结保证书范本
2015/05/11 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
2016新年年会主持词
2015/07/06 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
netty 实现tomcat的示例代码
2022/06/05 Servers