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

面试题 相关文章推荐
接口中的方法可以是abstract的吗
Jul 23 面试题
C++如何引用一个已经定义过的全局变量
Aug 25 面试题
.NET面试题:什么是反射
Sep 30 面试题
一些网络技术方面的面试题
May 01 面试题
可以使用抽象函数重写基类中的虚函数吗
Jun 02 面试题
编写一个类体现构造,公有,私有方法,静态,私有变量
Aug 10 面试题
what is the difference between ext2 and ext3
Nov 03 面试题
软件测试面试题
Oct 21 面试题
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
Dec 30 面试题
Java程序员综合测试题
Apr 25 面试题
程序员跳槽必看面试题总结
Jun 28 面试题
介绍一下Ruby中的对象,属性和方法
Jul 11 面试题
什么是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
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
angular.js分页代码的实例
2016/07/27 Javascript
js闭包用法实例详解
2016/12/13 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
js实现简单页面全屏
2019/09/17 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
pytorch梯度剪裁方式
2020/02/04 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
开办化妆品公司创业计划书
2013/12/26 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
带薪年假请假条
2014/02/04 职场文书
法院授权委托书范文
2014/08/02 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
人事主管岗位职责
2015/02/04 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书