`

ajax的原理和运行机制

    博客分类:
  • AJax
阅读更多

关于ajax,是最近炒得非常火的一种技术,并且时下它也是非常流行。当然,它并不是什么新技术,而是在各种已有的技术和支持机制下的一个统一。在我的项目中,偶尔也会用到ajax,用来给用户一些无刷新的体验。用过几次之后,我个人决定对它的原理和运行机制做一个总结。 
    ajax这个名字据说是Asynchronous JavaScript + XML的简写,实际上,它由下列几种技术组合而成。 

   1.使用CSS和XHTML来表示。 
   2. 使用DOM模型来交互和动态显示。 
   3.使用XMLHttpRequest来和服务器进行异步通信。 
   4.使用javascript来绑定和调用。 

ajax的原理 
  XMLHttpRequest是ajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。 
  所以我们先从XMLHttpRequest讲起,来看看它的工作原理。 
  首先,我们先来看看XMLHttpRequest这个对象的属性。 
  它的属性有: 
  onreadystatechange  每次状态改变所触发事件的事件处理程序。 
  responseText     从服务器进程返回数据的字符串形式。 
  responseXML   从服务器进程返回的DOM兼容的文档数据对象。 
  status                 从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪) 
  status Text         伴随状态码的字符串信息 
  readyState         对象状态值,0—未初始化 1—正在加载  2—加载完毕 3—交互 4—完成。 
  
  但是,由于各浏览器之间存在差异,所以创建一个XMLHttpRequest对象可能需要不同的方法。这个差异主要体现在IE和其它浏览器之间。 
下面是面对不同浏览器分别创建的XMLHttpRequest对象。 

<script language="javascript" type="text/javascript"> 
var xmlHttp = false; 
//创建面向IE的XMLHttpRequest对象 
try { 
//使用Msxml的一个版本来创建 
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
} catch (e) { 
try { 
//使用它的另外一个对象来创建 
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} catch (e2) { 
xmlHttp = false; 



if (!xmlHttp && typeof XMLHttpRequest != 'undefined') { 
//创建面向其它非微软浏览器的XMLHttpRequest对象 
xmlHttp = new XMLHttpRequest(); 

</script> 

这个过程分为三步,首先我们定义一个xmlHttp来引用创建的XMLHttpRequest。然后,我们尝试在微软的浏览器中创建该对象,先用Msxml.XMLHTTP对象来创建,如果失败再尝试用macrosoft.XMLHTTP来创建它.最后,我们面向非微软浏览器来创建该对象. 
 这样,我们创建了一个XMLHttpRequest对象,下面我们来看如何发出一个XMLHttpRequest请求。 function executeXMLHttpRequest(callback,url) 

//处理非微软浏览器的情况 
if(window.XMLHttpRequest)  

  xhr=new XMLHttpRequest(); 
  xhr.onreadystatechange = callback; 
  xhr.open("Get",url,true); 
  xhr.send(null); 

//处理微软浏览器的情况 
else if(window.ActiveXObject) 

  xhr=new ActiveXObject("macrosoft.XMLHttp"); 
  if(xhr) 

  xhr.onreadystatechage=callback; 
  xhr.open("Get",url,true); 
  xhr.send();  


由上面可见,执行XMLHttpRequest实际上大多数代码还是用在处理浏览器的区别上面,针对不同的浏览器它还是要做出不同的处理,但是这样看上去也非常的直观。 
在上面的代码中,最关键的是: 
xhr.onreadystatechage=callback   它定义了回调函数,一旦响应它就会自动执行。 
xhr.open(""Get",url,true);   true表示您想要异步执行该请求。 

对于callback来说,我们有: 
function processAjaxResponse() { 
//状态标识为已完成 
  if (xhr.readyState == 4) { 
//已就绪 
    if (xhr.status == 200) { 
      502 502'votes').innerHTML = xhr.responseText; 
    } else { 
      alert("There was a problem retrieving the XML data: 
" + 
      xhr.statusText); 
    } 
  } 

就是说,一旦服务器处理完XMLHttpRequest并返回给浏览器,用xhr.onreadystatechange指派的回调方法将自动调用。 

上面差不多就是XMLHttpRequest的整个工作流程,它首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。 

  知道了XMLHttpRequest的工作流程,我们可以看出,XMLHttpRequest是完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,因为ajax无非是两个过程,发出请求和响应请求。并且它完全是一种客户端的技术。而XMLHttpRequest正是处理了服务器端和客户端通信的问题所以才会如此的重要。 
  现在,我们对ajax的原理大概可以有一个了解了。我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。至于现在流行的很多ajax控件,比如magicajax等,可以返回DataSet等其它数据类型,只是将这个过程封装了的结果,本质上他们并没有什么太大的区别。 

分享到:
评论

相关推荐

    Ajax工作原理及其运行机制

    本资源详细说明了什么是ajax,ajax的工作原理工作机制及其ajax的使用

    Ajax从入门到精通

    讲述了ajax的运行机制以及原理帮助学习的资料

    ASP.NET+AJAX实现进度条上传文件

    实现机制很简单,就是让asp.net产生一个唯一的guid,这个id序号是唯一的,通过ajax取出来赋值给一个隐藏字段;第二个,如何获取guid标志的文件信息?通过asp.net缓存机制实现,上传的过程中,不断的将上传信息往缓存...

    征服RIA:基于JavaScript的Web客户端开发卷三

    本篇除介绍Ajax原理和通用框架之外,还分别为从事Java和.NET开发的程序员安排了适合他们的DWR、Atlas框架。Ext篇:能否提供复杂用户界面,是RIA的一个重要判定标准。在本书中,笔者把这一重任交给了Ext。希望读者...

    征服RIA:基于JavaScript的Web客户端开发卷二

    本篇除介绍Ajax原理和通用框架之外,还分别为从事Java和.NET开发的程序员安排了适合他们的DWR、Atlas框架。Ext篇:能否提供复杂用户界面,是RIA的一个重要判定标准。在本书中,笔者把这一重任交给了Ext。希望读者...

    DWR中文教程 PDF格式

    它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java 到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    1.5.2 部署和运行 11 1.6 控件生命周期 12 1.6.1 概述 12 1.6.2 用代码跟踪控件生命周期过程 14 1.7 本章总结 17 第2章 服务器控件开发中的调试技术 18 2.1 预置代码示例 18 2.2 调试页面服务端代码 19 2.3 ...

    DWR的介绍以及使用范例.还有使用DWR的相关配置

    它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    如果扎实地掌握了asp.net控件的运行机制,开发一个页面级的asp.net应用程序会变得非常简单。本书宗旨就是让开发人员真正理解asp.net技术,帮助开发人员提高asp.net开发的技术水平。学完本书后您不仅能够掌握控件开发...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    1.5.2 部署和运行 11 1.6 控件生命周期 12 1.6.1 概述 12 1.6.2 用代码跟踪控件生命周期过程 14 1.7 本章总结 17 第2章 服务器控件开发中的调试技术 18 2.1 预置代码示例 18 2.2 调试页面服务端代码 19 2.3 ...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    1.5.2 部署和运行 11 1.6 控件生命周期 12 1.6.1 概述 12 1.6.2 用代码跟踪控件生命周期过程 14 1.7 本章总结 17 第2章 服务器控件开发中的调试技术 18 2.1 预置代码示例 18 2.2 调试页面服务端代码 19 2.3 ...

    Ajax应用中的竞态条件 (2009年)

    在Web应用程序中,由于Ajax技术的异步特性,当客户端同时产生多个请求时,这些请求将在服务器端异步运行。由于无法预测这些请求的执行次序,如果它们在同一时间试图修改同一个关键数据片段,就可能导致在服务器响应时发生...

    dwr.jar包+教程.pdf.ppt

    dwr 正版教程 第1章. DWR入门 1.1 简介 ...这种从Java到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    11.1.2 母版页运行机制 11.2 创建母版页 11.3 创建内容页 11.4 本章小结 第12章 WebPart部件 12.1 WebPart基础知识 12.1.1 WebPart部件概述 12.1.2 W曲部件具体应用 12.1.3 Web部件基本控件 12.2 创建...

    asp.net知识库

    asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 ...

    Java面试宝典2020修订版V1.0.1.doc

    2、java为什么能够跨平台运行? 13 3、String是基本数据类型吗?我可不可以写个类继承于String? 14 4、谈谈&和&&的区别? 14 5、Switch语句里面的条件可不可以是byte、long、String?使用时候还应注意什么? 14 6、...

    ASP.NET3.5从入门到精通

    第 16 章 ASP.NET 3.5 和AJAX 16.1 AJAX 基础 16.1.1 什么是AJAX 16.1.2 ASP.NET AJAX 入门 16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 第一篇窗口与界面编程 19 16.1.5 AJAX 简单示例 16.2 ASP.NET 3.5AJAX ...

Global site tag (gtag.js) - Google Analytics