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

面试题 相关文章推荐
请用用Java代码写一个堆栈
Jan 26 面试题
*p++ 自增p 还是p所指向的变量
Jul 16 面试题
什么是Oracle的后台进程background processes?都有哪些后台进程?
Apr 26 面试题
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
Oct 24 面试题
网络安全类面试题
Aug 01 面试题
什么是属性访问器
Oct 26 面试题
Solaris操作系统的线程机制
Dec 23 面试题
几个Linux面试题笔试题
Dec 01 面试题
Ejb技术面试题
Apr 29 面试题
一道Delphi上机题
Jun 04 面试题
Delphi笔试题
Nov 14 面试题
顺丰快递Java软件工程师面试题
Jul 31 面试题
什么是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
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
基于PHP与XML的PDF文档生成技术
2006/10/09 PHP
Php Cookie的一个使用注意点
2008/11/08 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
js 上传图片预览问题
2010/12/06 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
python 堆和优先队列的使用详解
2019/03/05 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
MYSQL基础面试题
2012/05/13 面试题
食品安全承诺书
2014/05/22 职场文书
化学工程专业求职信
2014/08/10 职场文书
开学典礼校长致辞
2015/07/29 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL