`

获取XmlHttpRequest对象

    博客分类:
  • AJAX
阅读更多

    还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽然规模较小。但令人奇怪的是,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();
}

 

这段代码的核心分为三步:

  1. 建立一个变量 xmlHttp 来引用即将创建的 XMLHttpRequest 对象。
  2. 尝试在 Microsoft 浏览器中创建该对象:
    • 尝试使用 Msxml2.XMLHTTP 对象创建它。
    • 如果失败,再尝试 Microsoft.XMLHTTP 对象。
  3. 如果仍然没有建立 xmlHttp,则以非 Microsoft 的方式创建该对象。

最后,xmlHttp 应该引用一个有效的 XMLHttpRequest 对象,无论运行什么样的浏览器。

 

分享到:
评论

相关推荐

    三种方式获取XMLHttpRequest对象

    获取XmlHttpRequest对象 代码如下: //1 function getXMLHttpRequest() { var xmlHttpReq; try { // Firefox, Opera 8.0+, Safari xmlHttpReq = new XMLHttpRequest(); } catch (e) { try {// Internet Explorer ...

    全面剖析XMLHttpRequest对象

    全面剖析XMLHttpRequest对象,介绍

    javascript完全学习手册1 源码

    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...

    XMLHttpRequest对象_Ajax异步请求重点(推荐)

    2.XMLHttpRequest对象是XMLHttp组件的对象,它是一个抽象对象,允许脚本从服务器获取返回的eXML数据或将数据发送到服务器端 3.XMLHttpRequest可以实现客户端与服务器只进行数据层面的交互,不必每次刷新页面 4....

    jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法

    主要介绍了jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    XMLHTTPRequest.参考文件

    Ajax中XMLHTTPRequest对象的说明文档,包含其相应的对象和方法

    XMLHttpRequest

    xmlHttpRequest对象的status代表当前http请求的状态,是一个长整型数据,现在介绍一下它的含义。 http请求状态及其含义表 1xx - 信息提示 100 - 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1...

    详解XMLHttpRequest(一)同步请求和异步请求

    请求的类型是由这个XMLHttpRequest对象的open()方法的第三个参数async的值决定的。如果该参数的值为false,则该XMLHttpRequest请求以同步模式进行,否则该过程将以异步模式完成。 两种通信模式:同步和异步请求: ...

    js(javascript)获取网页源码

    //直接通过XMLHttpRequest对象获取远程网页源代码 function getSource() { var url = document.getElementById("url").value; //获取目标地址信息 //地址为空时提示用户输入 if (url == "") { alert("请输入...

    PHP100视频教程 48:Ajax+PHP快速上手及应用

    2、创建XMLHttpRequest对象对于Ajax,最核心的一个对象是XMLHttpRequest,所有的Ajax操作都离不开对这个对象的操作xmlHttp = new XMLHttpRequest();3、XMLHttpRequest对象相关方法XMLHttpRequest.open(传递方式,地址...

    XMLHttpRequest手册

    压缩包“ajax.rar”内含:“《掌握Ajax.chm》”和“《XMLHttpRequest手册.chm》”。 1、《掌握Ajax.chm》包含下列内容: 掌握 Ajax,第 1 部分: Ajax 入门简介 ... 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax ...

    Ajax获取XMLHttp对象的方法

    本文实例讲述了Ajax获取XMLHttp对象的方法。分享给大家供大家参考,具体如下: Ajax 中要用到XMLHttp对象,我见过各种获取该对象的写法,觉得该写法最优雅。首先考虑到了适合不同的浏览器;其次考虑到了优先加载次序...

    Ajax-hook:拦截由XMLHttpRequest发出的浏览器的AJAX请求

    阿贾克斯钩原理解析: : 简介Ajax-hook是一个精巧的用于拦截浏览器XMLHttpRequest的库,它可以在XMLHttpRequest对象发起请求之前和接收响应内容之后获得处理权。通过它您可以在对请求和响应进行一些预处理。更新记录...

    北京中科信软AJAX培训

    XMLHttpRequest对象的属性和方法 Ajax编程 如何使用Ajax 初始化对象 指定响应处理函数 发出http请求 处理服务器返回的信息 一个初步的Ajax开发框架 异常处理机制 中文乱码问题及其解决方案 使用responseText处理返回...

    js如何获取图片url的Blob值并预览示例代码

    前言 Blob 对象表示一个不可变、原始数据的类文件对象...1)使用 XMLHttpRequest 对象获取图片url的Blob值 //获取图片的Blob值 function getImageBlob(url, cb) { var xhr = new XMLHttpRequest(); xhr.open(get, u

    《Ajax技术简介和案例分析》(42P)

    研讨内容 Ajax原理与Web2.0 通过案例分析Ajax优缺点 ...1999年IE5.0作为一个ActiveX对象形式引入了XMLHttpRequest对象 目的是实现通过后台获取数据 其他浏览器则把它作为window对象的属性 …………

    Ajax核心XMLHttpRequest总结

    此篇文章重点介绍使用XMLHttpRequest对象与服务器端进行异步数据交换。  使用方法   XMLHttpRequest五步使用法: 代码如下:  1.创建对象;  2.注册回调函数;  3.使用open方法设置和服务器交互的基本信息;...

    javascript前端和后台进行数据交互方法示例

    //获取XMLHttpRequest对象用于与后台交互数据 function getXHR(){ var xmlHttp; try { xmlHttp=new XMLHttpRequest();//新版本浏览器 }catch(e) { try{ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }

Global site tag (gtag.js) - Google Analytics