`

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**(Asynchronous JavaScript and XML,异步JavaScript和XML)是一种网页开发技术,它利用了一系列现有的技术来创建更快速响应、更用户友好的Web应用。传统...

    隐藏框架实现ajax原理

    在IT领域,Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,允许在不重新加载整个页面的情况下,与...通过理解Ajax的工作机制和隐藏框架的应用,开发者可以更好地构建动态、交互性强的Web应用程序。

    深入浅出Ajax(Head Rush Ajax) 源码 书中代码

    书中提供的源码涵盖了这些章节中的实例和示例,读者可以通过实际运行和修改代码来加深对Ajax的理解。这些源码通常会包括: - 用JavaScript创建和管理XMLHttpRequest对象的脚本 - 处理各种HTTP请求和响应的函数 - ...

    Ajax开发原理简略

    - **用户体验**:Ajax请求可能会在后台运行,应提供进度提示或取消操作的机制,避免用户感到迷茫。 总之,Ajax技术通过异步数据交换和局部更新,极大地提升了Web应用的交互性和效率。理解其工作原理并熟练运用Ajax...

    JS运行机制.xmind.zip

    JavaScript(简称JS)是Web开发中的关键语言,其运行机制对于理解高性能的前端应用至关重要。在浏览器环境中,JS代码的执行涉及到多个线程协同工作,这些线程共同构成了浏览器的运行机制。 首先,我们来详细了解GUI...

    ajax.dll以及说明文档和demo

    通过运行和分析这些示例,开发者可以快速上手,了解`ajax.dll`的工作原理和最佳实践。 总的来说,`ajax.dll`为开发者提供了一个便捷的工具,使得在.NET环境中使用Ajax变得更加简单。通过结合说明文档和示例,开发者...

    超酷的AJAX源码和Demo(1)

    `demo`文件夹通常包含实际运行的示例,可能是一系列的HTML、CSS和JavaScript文件,展示了不同类型的AJAX请求和数据处理方式。通过这些示例,我们可以看到如何使用AJAX进行数据交互,如获取JSON或XML数据,或者如何...

    Ajax经典例题,Ajax书上的所有例题

    这本书的例题可能涵盖以上各个方面,通过解题可以深入理解Ajax的工作原理和实际应用。学习这些例题将有助于提升你使用Ajax构建动态Web应用的能力,无论是在jsp或Java环境中,还是配合HTML进行前端开发,都会受益匪浅...

    反向ajax聊天简单例子

    1. 反向Ajax原理: 反向Ajax的核心思想是通过持久连接(Persistent Connection)或轮询(Polling)等技术,使服务器能够在有新消息时主动向客户端发送数据,实现即时通讯。这在聊天应用、实时股票更新、在线游戏等...

    AJAX文档和例子

    解压后,可以逐个运行这些例子,深入理解AJAX的工作机制及其在实际项目中的应用。 总的来说,AJAX是现代Web开发中的关键技术,它极大地提升了网页的动态性和用户体验。通过学习AJAX,开发者可以构建更高效、更响应...

    《Ajax高级程序设计》(中文版1-6章 电子书+源码打包)

    - **实例解析**:书中提供的源码可以帮助读者更好地理解Ajax的实际应用,通过阅读和运行代码,加深对Ajax原理的理解。 - **调试技巧**:学习如何利用开发者工具进行Ajax请求的调试,以找出并解决问题。 这本书的...

    dwr和ajax使用demo

    DWR(Direct Web Remoting)是一种在Web应用程序中实现异步JavaScript和XML(Ajax)的方法,它简化了客户端和服务器之间的通信,使得动态更新网页变得更加简单。DWR允许JavaScript直接调用Java方法,就像它们在同一...

    自己动手写的AJAX的小程序

    10. **实际项目经验:** 作者的项目经历是一个宝贵的实践机会,通过实际编写和调试AJAX代码,可以深入理解AJAX的运行机制和在真实场景中的应用。 这个项目可能包含了以上所有知识点的实践,从基础的AJAX请求到复杂...

    清除AJAX的缓存,清除AJAX的缓存

    ### 清除AJAX的缓存 #### 一、引言 在Web开发过程中,Ajax(Asynchronous JavaScript and XML)...同时,开发者还需要密切关注浏览器缓存机制的变化,以便及时调整自己的开发策略,确保应用始终保持高效稳定运行。

    ajax对象池

    在IT行业中,Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的...而`Ajax.js`和`说明.txt`提供了实现这一机制的具体代码和使用说明,对于开发者来说是宝贵的参考资料。

    ajax 多年收集资料(15个教学文档和应用实例)

    这些是Ajax的基础知识和应用场景,涵盖了从基本原理到高级技巧,对于网站开发人员和JavaScript开发者来说,理解和掌握Ajax技术是提升项目性能和用户体验的关键。通过提供的15个教学文档和应用实例,可以深入学习和...

    ajax2.0框架安装文件

    Ajax 2.0框架是微软在.NET Framework 2.0时代推出的一个重要技术,它极大地增强...尽管现在已经有更新的技术,如jQuery、AngularJS或React,但理解Ajax 2.0的基本原理和工作方式对于深入学习现代前端技术仍然很有帮助。

    挑战JavaScript &amp; Ajax 应用开发

    3. **Ajax原理**:XMLHttpRequest 对象的使用,理解 HTTP 请求和响应,以及如何设置请求头、发送数据和处理返回的数据。 4. **Promise 和 async/await**:用于解决异步编程中的回调地狱问题,提高代码可读性和可...

    AJax详细解释AJax详细解释

    AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。... 一、XMLHttpRequest对象 ...了解和掌握AJAX的原理和应用,对于提升Web应用的性能和用户体验至关重要。

    疯狂ajax讲义源代码

    《疯狂Ajax讲义》是由知名IT作者李刚编写的...通过对《疯狂Ajax讲义》的源代码学习,读者不仅可以掌握Ajax的基本用法,还能深入了解其背后的原理和最佳实践,从而在实际项目中灵活运用,提高Web应用的性能和用户体验。

Global site tag (gtag.js) - Google Analytics