`
zhangyaochun
  • 浏览: 2620799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Ajax系列之XMLHttpRequest对象

    博客分类:
  • ajax
阅读更多

Ajax系列开篇----有兴趣的同学可以看看《Ajax实战:实例详解》

 

简单记录,个人学习。

 

1. Ajax的名片

 

  • Asynchronous JavaScript and XML (异步JavaScript和XML)。
  • 是Jesse James Gaiiett创造的名词,是指一种创建交互式的网页应用的网页开发技术。
2. Ajax的优势
  • Ajax不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术
  • 使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信,这样可在不重载页面的情况与Web服务器进行数据的交换。
  • 在浏览器与Web服务器之间使用异步数据传输(HTTP请求),使网页从服务器请求少量的信息,而不是整个页面。(其实简单通俗地讲就是局部刷新,非全屏刷新)
3. 开发模式

  • Ajax开发和传统的CS开发有不同,最大的问题在于易用性。由于Ajax依赖浏览器的JavaScript和XML,浏览器的兼容性和支持的标准也变得和JavaScript的运行时性能一样重要。
  • Ajax开发人员需要理解传统的MVC架构,也需要考虑CS环境的外部和使用Ajax技术来重定型MVC边界。
  • Ajax开发人员必须禁止以页面集合的方式来考虑Web应用而需要将认为是单个页面

     一些常识性的东西就简单地介绍到这里,有兴趣的同学可以看看文章后面的链接还有我推荐的那本书,或者差异网上的各种资料。

下面我要重点说明的是XMLHttpRequest

1 . 什么是XMLHttpRequest对象?

    ------------它是用于在后台与服务器交换数据
    XMLHttpRequest对象在大部分浏览器上已经实现而且拥有了一个简单的接口允许数据从客户端传递到服务端,但并不会打断用户当前的操作。使用XMLHttpRequest传送的数据可以是任何格式,虽然从名字上建议XML格式的数据。


2. 如何创建XMLHttpRequest对象?

   我先讲一下我的创建思路是这样的,我会展示一些框架封装的创建过程例如jQuery,也会直接贴出一些网上人自己总结的版本,让大家在学习或者编写自己脚本库的时候参考一下。

/*
创建的过程主要还是浏览器的兼容问题
IE浏览器的多个版本
FF和其他原生支持XMLHttpRequest
*/
function createXMLHttpRequest(){
       var xmlrequest;
       //判断语句创建
       if(window.XMLHttpRequest){
          xmlrequest = new XMLHttpRequest();
           }else{
          //各个版本考虑进去
         var MXML = ["MSXML2.XMLHTTP.7.0","MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
          //for循环
          for(var i = 0;i<MXML.length;i++){
               try{
                      xmlrequest = new ActiveXObject(MXML[i]);
                      break;
                  }catch(e){}
         }
    }
}
 
可能有的人看到上面的代码就烦躁了,呵呵,我打的也酸啊。如果是我的话,我能不用判断语句的话就不用(I mean if...)

回来看看JQuery的创建过程。你会发现差距就出现了。

//先看一个早期的版本1.3.1
//源码地址http://code.jquery.com/jquery-1.3.1.js
//抽取其中的一段

/*Create the request object;Microsoft failed to properly(正确)
   implement(实现) the XMLHttpRequest in IE7,so we use the ActiveXObject       when it is available(可用)
*/
xhr:function(){
      return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();   
}
 
再来一个版本
/*
这是1.4.1的版本
地址 http://code.jquery.com/jquery-1.4.1.js
*/
xhr  : window.XMLHttpRequest && (window.location.protocol !== "file:"
                 || !window.ActiveXObject) 
             ? function(){return new window.XMLHttpRequest();
             } : 
                function(){
                       try{
                          return new window.ActiveXObject("Microsoft.XMLHTTP");
                     }catch(e){}
                  }
 我们停一下,如果是你,你会对这段代码进行怎样的重构??

/*
1.4.4的版本
*/
if(window.ActiveXObject){
     jQuery.ajaxSettings.xhr = function(){
                   if(window.location.protocol !== "file:"){
                           try{
                                     return new window.XMLHttpRequest();
                                  }catch(e){}
                    }
                   try{
                         return new window.ActiveXObject("Microsoft.XMLHTTP");
                    }catch(e){}
           }
}
 
其实当初在研究这个版本差异的api的时候,1.4.4的版本的写法让我有点诧异,如果是我去做这个重构的话,我可能选择的还是直接到下面这个版本。

/*
版本为1.5.1
*/
jQuery.ajaxSettings.xhr = window.ActiveXObject ? 
         function(){ 
         return !this.isLocal && createStandardXHR() ||  createActiveXHR() ;    
          } :  createStandardXHR;

function createStandardXHR() {
	try {
		return new window.XMLHttpRequest();
	} catch( e ) {}
}

function createActiveXHR() {
	try {
		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
	} catch( e ) {}
}

 var rlocalProtocol = /(?:^file|^widget|\-extension):$/,
       ajaxLocParts,
       rurl = /^([\w\+\.\-]+:)\/\/([^\/?#:]*)(?::(\d+))?/;
       ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() );
 function isLocal {
  rlocalProtocol.test( ajaxLocParts[ 1 ] )
}           
 
当然有兴趣挖掘和研究技术的同学可用看看,很多人在研究jQuery源码的时候可能是按照某一个特定的版本,我个人觉得,如果你是基于jQuery做一套框架的话,你可用性能调研选择一个稳定的版本,但是如果你做某一个api的调研,你可用查看各个版本的差异, 这样你会发现重构了那些?思考一下为什么这么做?如果是你你会咋改?

说的好多。希望能帮助到大家学习。


参考资料如下

1
1
分享到:
评论

相关推荐

    Ajax之XMLHttpRequest详解

    Ajax的核心在于**XMLHttpRequest对象**,它使得Web应用程序可以在不刷新整个页面的情况下与服务器进行异步通信。 #### 二、XMLHttpRequest对象概述 XMLHttpRequest对象是实现Ajax功能的关键组件。它提供了一种在...

    全面剖析XMLHttpRequest对象

    XMLHttpRequest对象是AJAX(异步JavaScript和XML)技术的核心,它允许Web应用程序在不刷新整个页面的情况下与服务器进行数据交换,从而实现更加流畅和互动的用户体验。在现代浏览器中,无论是在JavaScript、Jscript...

    ajax系列教程 1

    **Ajax系列教程1** 在Web开发领域,Ajax(异步JavaScript和XML)是一种改变游戏规则的技术,它使得网页能够在不刷新整个页面的情况下与服务器进行数据交互。本教程将引导你深入理解Ajax的基础知识,助你在Web2.0的...

    ajax系列教程 6

    JavaScript是实现Ajax的关键,负责构建XMLHttpRequest对象,这是Ajax通信的基础。XML虽在早期被用作数据交换格式,但现在JSON(JavaScript Object Notation)更常见,因为它的解析更简单且更高效。 二、服务器端...

    ajax系列教程 9

    这个系列教程的第九部分,我们聚焦于“Ajax系列教程 9”,它将深入探讨Ajax如何在网页开发中发挥重要作用,特别是在提升用户体验方面。 Ajax的核心原理是利用JavaScript异步地与服务器进行通信,同时通过XML或JSON...

    AJAX系列 chm格式

    **AJAX系列 CHM格式** AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,提升了用户体验。...

    ASP.NET AJAX深入浅出系列课程(7):Microsoft AJAX Library对于JavaScript原生对象的扩展(上)

    最后,我们不能忽视AJAX库对XMLHttpRequest对象的改进。它提供了ScriptManager和UpdatePanel等组件,使得异步更新页面变得更加简单。通过这些组件,开发者可以轻松实现无刷新的数据更新,提升用户体验。 总的来说,...

    Ajax Ajax本质 Ajax本质源码

    2. **JavaScript事件处理**:当请求被发送到服务器后,XMLHttpRequest对象会触发一系列的事件,如onreadystatechange。开发者可以注册这些事件的回调函数,以便在合适的时候执行相应的操作,例如检查readyState和...

    掌握Ajax系列2:使用JavaScript和Ajax发出异步请求

    【Ajax系列2:使用JavaScript和Ajax发出异步请求】 在Web开发中,传统的请求/响应模型通常是用户点击按钮,浏览器发送整个页面请求给服务器,服务器处理后返回一个新的HTML页面,浏览器再重新渲染。这种模式在Web ...

    ajax的所有组件.ajax的组件

    1. **XMLHttpRequest对象**:这是Ajax的基础,它允许JavaScript在后台与服务器通信。通过创建XMLHttpRequest实例,设置HTTP请求的方法、URL和类型,然后调用send()方法发送请求。当服务器响应时,XMLHttpRequest对象...

    掌握AJAX系列- Brett McLaughlin著

    传统的Web应用程序通常依赖于用户的操作(如点击按钮)触发整个页面的刷新,而Ajax则打破了这一模式,通过XMLHttpRequest对象在后台与服务器通信,只更新必要的部分,提高了用户体验。例如,用户在网页中填写表单并...

    冯威ajax 全部源码

    JavaScript是Ajax的核心,它负责创建XMLHttpRequest对象,向服务器发送请求,并处理服务器返回的数据。学习Ajax首先要掌握JavaScript的基本语法,包括变量、数据类型、控制流程、函数等。此外,理解DOM(Document ...

    Java相关课程系列笔记之十一Ajax学习

    在本篇Java相关课程系列笔记之十一中,我们聚焦于Ajax的学习,这是一项在Web开发中广泛使用的技术,用于创建动态、无刷新的用户界面。Ajax全称Asynchronous JavaScript and XML,即异步JavaScript和XML,它允许网页...

    ASP.NET AJAX深入浅出系列课程(8):Microsoft AJAX Library对于JavaScript原生对象的扩展(下)

    5. **XMLHttpRequest对象的增强**:ASP.NET AJAX库对原生的XMLHttpRequest进行了封装,创建了` Sys.Net.XMLHttpExecutor`类,提供了一套更丰富的API,包括进度事件、错误处理等,使得与服务器的异步通信更加可控和...

    ajax系列教程 4

    **Ajax系列教程 4** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术是一种用于创建动态、交互性更强的网页应用的关键工具。它允许页面在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页...

    ajaxDemo的例子

    Ajax的核心是XMLHttpRequest对象,它允许我们在后台与服务器交换数据并更新页面。在这些HTML文件中,可能定义了事件监听器,例如按钮点击,当用户触发这些事件时,会启动Ajax请求。JavaScript代码会创建...

    ajax教程

    - **创建XMLHttpRequest对象**:大多数现代浏览器都内置了XMLHttpRequest对象。 - **打开连接**:使用XMLHttpRequest对象的`open()`方法,指定请求类型(GET或POST)、URL和是否异步。 - **设置请求头**:对于POST...

    JavaScript-AJAX系列视频教程(完整无水印版)

    其次,AJAX的核心在于XMLHttpRequest对象,它是JavaScript与服务器进行异步通信的桥梁。通过创建XMLHttpRequest实例,设置请求方法(GET或POST)、URL、HTTP头等信息,然后发送请求。在接收到响应后,可以处理返回的...

    ajax系列教程 3

    - **XMLHttpRequest对象**:这是Ajax的基础,用于在后台与服务器通信。通过创建XMLHttpRequest实例,我们可以发送HTTP请求并接收响应。 - **JavaScript事件处理**:监听用户行为,如点击按钮,触发Ajax请求。 - **...

    ajax系列教程 8

    **Ajax系列教程 8:设计高质量的Ajax应用** 在Web开发领域,Ajax(Asynchronous JavaScript and XML)技术已经成为构建交互式、动态网页的关键工具。它允许网页在不刷新整个页面的情况下,通过后台与服务器交换数据...

Global site tag (gtag.js) - Google Analytics