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

面试题 相关文章推荐
方法名是否可以与构造器的名字相同
Jun 04 面试题
请说出几个常用的异常类
Jan 08 面试题
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
Jul 17 面试题
阿尔卡特(中国)的面试题目
Aug 20 面试题
介绍一下内联、左联、右联
Dec 31 面试题
Linux内核产生并发的原因
Jul 13 面试题
Linux不知道文件后缀名怎么判断文件类型
Apr 26 面试题
Linux上比较文件的命令都有哪些
Feb 24 面试题
国外软件测试工程师面试题
Dec 09 面试题
介绍一下EJB的体系结构
Aug 01 面试题
EJB timer的种类
Oct 28 面试题
mysql有关权限的表都有哪几个
Apr 22 面试题
什么是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
实现“上一页”和“下一页按钮
2006/10/09 PHP
PHP聊天室技术
2006/10/09 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
Python从函数参数类型引出元组实例分析
2019/05/28 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
python爬虫 requests-html的使用
2020/11/30 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
敬老文明号事迹材料
2014/01/16 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL