还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽然规模较小。但令人奇怪的是,XMLHttpRequest
成了这场战争的牺牲品之一。因此获得 XMLHttpRequest
对象可能需要采用不同的方法。下面我将详细地进行解释。
使用 Microsoft 浏览器
Microsoft 浏览器 Internet Explorer 使用 MSXML 解析器处理 XML。因此如果编写的 Ajax 应用程序要和 Internet Explorer 打交道,那么必须用一种特殊的方式创建对象。
但并不是这么简单。根据 Internet Explorer 中安装的 JavaScript 技术版本不同,MSXML 实际上有两种不同的版本,因此必须对这两种情况分别编写代码。下面的代码在 Microsoft 浏览器上创建了一个 XMLHttpRequest
。
在Microsoft浏览器上创建XMLHttpRequest对象
var xmlHttp=false;
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e2){
xmlHttp=false;
}
}
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
和
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
。
这两行代码基本上就是尝试使用一个版本的 MSXML 创建对象,如果失败则使用另一个版本创建该对象。不错吧?如果都不成功,则将 xmlHttp
变量设为 false,告诉您的代码出现了问题。如果出现这种情况,可能是因为安装了非 Microsoft 浏览器,需要使用不同的代码。
处理Mozilla和非Microsoft浏览器
如果选择的浏览器不是 Internet Explorer,或者为非 Microsoft 浏览器编写代码,就需要使用不同的代码。事实上就是下面一行简单代码:
var xmlHttp = new XMLHttpRequest();
。
这行简单得多的代码在 Mozilla、Firefox、Safari、Opera 以及基本上所有以任何形式或方式支持 Ajax 的非 Microsoft 浏览器中,创建了 XMLHttpRequest
对象。
结合起来
关键是要支持所有 浏览器。谁愿意编写一个只能用于 Internet Explorer 或者非 Microsoft 浏览器的应用程序呢?或者更糟,要编写一个应用程序两次?当然不!因此代码要同时支持 Internet Explorer 和非 Microsoft 浏览器。代码如下。
以支持多种浏览器的方式创建XMLHttpRequest对象
/* Create a new XMLHttpRequest object to talk to the Web server */
var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
@end @*/
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
这段代码的核心分为三步:
- 建立一个变量
xmlHttp
来引用即将创建的 XMLHttpRequest
对象。
- 尝试在 Microsoft 浏览器中创建该对象:
- 尝试使用
Msxml2.XMLHTTP
对象创建它。
- 如果失败,再尝试
Microsoft.XMLHTTP
对象。
- 如果仍然没有建立
xmlHttp
,则以非 Microsoft 的方式创建该对象。
最后,xmlHttp
应该引用一个有效的 XMLHttpRequest
对象,无论运行什么样的浏览器。
分享到:
相关推荐
获取XmlHttpRequest对象 代码如下: //1 function getXMLHttpRequest() { var xmlHttpReq; try { // Firefox, Opera 8.0+, Safari xmlHttpReq = new XMLHttpRequest(); } catch (e) { try {// Internet Explorer ...
全面剖析XMLHttpRequest对象,介绍
12.3.1 创建XMLHttpRequest对象 354 12.3.2 获取XMLHttpRequest 对象的信息 356 12.3.3 向服务器发送请求 357 12.3.4 处理服务器响应 360 12.3.5 用户注册实例 361 12.3.6 处理XML请求 364 12.3.7 动态列表 368 第13...
2.XMLHttpRequest对象是XMLHttp组件的对象,它是一个抽象对象,允许脚本从服务器获取返回的eXML数据或将数据发送到服务器端 3.XMLHttpRequest可以实现客户端与服务器只进行数据层面的交互,不必每次刷新页面 4....
主要介绍了jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
Ajax中XMLHTTPRequest对象的说明文档,包含其相应的对象和方法
xmlHttpRequest对象的status代表当前http请求的状态,是一个长整型数据,现在介绍一下它的含义。 http请求状态及其含义表 1xx - 信息提示 100 - 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1...
请求的类型是由这个XMLHttpRequest对象的open()方法的第三个参数async的值决定的。如果该参数的值为false,则该XMLHttpRequest请求以同步模式进行,否则该过程将以异步模式完成。 两种通信模式:同步和异步请求: ...
//直接通过XMLHttpRequest对象获取远程网页源代码 function getSource() { var url = document.getElementById("url").value; //获取目标地址信息 //地址为空时提示用户输入 if (url == "") { alert("请输入...
2、创建XMLHttpRequest对象对于Ajax,最核心的一个对象是XMLHttpRequest,所有的Ajax操作都离不开对这个对象的操作xmlHttp = new XMLHttpRequest();3、XMLHttpRequest对象相关方法XMLHttpRequest.open(传递方式,地址...
压缩包“ajax.rar”内含:“《掌握Ajax.chm》”和“《XMLHttpRequest手册.chm》”。 1、《掌握Ajax.chm》包含下列内容: 掌握 Ajax,第 1 部分: Ajax 入门简介 ... 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax ...
本文实例讲述了Ajax获取XMLHttp对象的方法。分享给大家供大家参考,具体如下: Ajax 中要用到XMLHttp对象,我见过各种获取该对象的写法,觉得该写法最优雅。首先考虑到了适合不同的浏览器;其次考虑到了优先加载次序...
阿贾克斯钩原理解析: : 简介Ajax-hook是一个精巧的用于拦截浏览器XMLHttpRequest的库,它可以在XMLHttpRequest对象发起请求之前和接收响应内容之后获得处理权。通过它您可以在对请求和响应进行一些预处理。更新记录...
XMLHttpRequest对象的属性和方法 Ajax编程 如何使用Ajax 初始化对象 指定响应处理函数 发出http请求 处理服务器返回的信息 一个初步的Ajax开发框架 异常处理机制 中文乱码问题及其解决方案 使用responseText处理返回...
前言 Blob 对象表示一个不可变、原始数据的类文件对象...1)使用 XMLHttpRequest 对象获取图片url的Blob值 //获取图片的Blob值 function getImageBlob(url, cb) { var xhr = new XMLHttpRequest(); xhr.open(get, u
研讨内容 Ajax原理与Web2.0 通过案例分析Ajax优缺点 ...1999年IE5.0作为一个ActiveX对象形式引入了XMLHttpRequest对象 目的是实现通过后台获取数据 其他浏览器则把它作为window对象的属性 …………
此篇文章重点介绍使用XMLHttpRequest对象与服务器端进行异步数据交换。 使用方法 XMLHttpRequest五步使用法: 代码如下: 1.创建对象; 2.注册回调函数; 3.使用open方法设置和服务器交互的基本信息;...
//获取XMLHttpRequest对象用于与后台交互数据 function getXHR(){ var xmlHttp; try { xmlHttp=new XMLHttpRequest();//新版本浏览器 }catch(e) { try{ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }