`

ajax原理

 
阅读更多

ajax原理和XmlHttpRequest对象

 

  Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。

XMLHttpRequestajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。

  所以我们先从XMLHttpRequest讲起,来看看它的工作原理。

  首先,我们先来看看XMLHttpRequest这个对象的属性。

  它的属性有:

  onreadystatechange  每次状态改变所触发事件的事件处理程序。

  responseText     从服务器进程返回数据的字符串形式。

  responseXML    从服务器进程返回的DOM兼容的文档数据对象。

  status           从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)

  status Text       伴随状态码的字符串信息

  readyState       对象状态值

0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)

1 (初始化) 对象已建立,尚未调用send方法

2 (发送数据) send方法已调用,但是当前的状态及http头未知

3 (数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBodyresponseText获取部分数据会出现错误,

4 (完成) 数据接收完毕,此时可以通过通过responseXmlresponseText获取完整的回应数据

 

  但是,由于各浏览器之间存在差异,所以创建一个XMLHttpRequest对象可能需要不同的方法。这个差异主要体现在IE和其它浏览器之间。下面是一个比较标准的创建XMLHttpRequest对象的方法。

 

   function CreateXmlHttp()

   {

  

   //IE浏览器创建XmlHttpRequest对象

    if(window.XmlHttpRequest)

    {

     xmlhttp=new XmlHttpRequest();

    }

    //IE浏览器创建XmlHttpRequest对象

     if(window.ActiveXObject)

    {

    try

    {

     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");    

    }

    catch(e)

    {

    try{

     xmlhttp=new ActiveXObject("msxml2.XMLHTTP");

     }

     catch(ex){}

    }

    }

   } 

function Ustbwuyi()

   {

    var data=document.getElementById("username").value;  

        CreateXmlHttp();

        if(!xmlhttp)

        {

         alert("创建xmlhttp对象异常!");

         return false;

        }      

        xmlhttp.open("POST",url,false);

        xmlhttp.onreadystatechange=function()

        {  

         if(xmlhttp.readyState==4)

           {

           document.getElementById("user1").innerHTML="数据正在加载...";

             if(xmlhttp.status==200)

             {

              document.write(xmlhttp.responseText);

             }     

           }

         }

        xmlhttp.send();

  

   }

如上所示,函数首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。

对于XmlHttpRequest的两个方法,opensend,其中open方法指定了:

a、向服务器提交数据的类型,即post还是get

b、请求的url地址和传递的参数。

c、传输方式,false为同步,true为异步。默认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。

    Send方法用来发送请求。

 

  知道了XMLHttpRequest的工作流程,我们可以看出,XMLHttpRequest是完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,因为ajax无非是两个过程,发出请求和响应请求。并且它完全是一种客户端的技术。而XMLHttpRequest正是处理了服务器端和客户端通信的问题所以才会如此的重要。

  现在,我们对ajax的原理大概可以有一个了解了。我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。至于现在流行的很多ajax控件,比如magicajax等,可以返回DataSet等其它数据类型,只是将这个过程封装了的结果,本质上他们并没有什么太大的区别。

 

 

7ajax的优点

   Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点:

   1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。

  2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。

  3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是按需取数据,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

  4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

8ajax的缺点

  下面我着重讲一讲ajax的缺陷,因为平时我们大多注意的都是ajax给我们所带来的好处诸如用户体验的提升。而对ajax所带来的缺陷有所忽视。

  下面所阐述的ajax的缺陷都是它先天所产生的。

   1ajax干掉了back按钮,即对浏览器后退机制的破坏。后退按钮是一个标准的web站点的重要功能,但是它没法和js进行很好的合作。这是ajax所带来的一个比较严重的问题,因为用户往往是希望能够通过后退来取消前一次操作的。那么对于这个问题有没有办法?答案是肯定的,用过Gmail的知道,Gmail下面采用的ajax技术解决了这个问题,在Gmail下面是可以后退的,但是,它也并不能改变ajax的机制,它只是采用的一个比较笨但是有效的办法,即用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。)

但是,虽然说这个问题是可以解决的,但是它所带来的开发成本是非常高的,和ajax框架所要求的快速开发是相背离的。这是ajax所带来的一个非常严重的问题。

 2、安全问题

技术同时也对IT企业带来了新的安全威胁,ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击。还有ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于credentials的安全漏洞等。

  3、对搜索引擎的支持比较弱。

  4、破坏了程序的异常机制。至少从目前看来,像ajax.dllajaxpro.dll这些ajax框架是会破坏程序的异常机制的。关于这个问题,我曾经在开发过程中遇到过,但是查了一下网上几乎没有相关的介绍。后来我自己做了一次试验,分别采用ajax和传统的form提交的模式来删除一条数据……给我们的调试带来了很大的困难。

 5、另外,像其他方面的一些问题,比如说违背了url和资源定位的初衷。例如,我给你一个url地址,如果采用了ajax技术,也许你在该url地址下面看到的和我在这个url地址下看到的内容是不同的。这个和资源定位的初衷是相背离的。

 6、一些手持设备(如手机、PDA等)现在还不能很好的支持ajax,比如说我们在手机的浏览器上打开采用ajax技术的网站时,它目前是不支持的,当然,这个问题和我们没太多关系。

 

 

9ajax的几种框架

 

 目前我们采用的比较多的ajax框架主要有ajax.dll,ajaxpro.dll,magicajax.dll 以及微软的atlas框架。Ajax.dllAjaxpro.dll这两个框架差别不大,而magicajax.dll只是封装得更厉害一些,比如说它可以直接返回DataSet数据集,前面我们已经说过,ajax返回的都是字符串,magicajax只是对它进行了封装而已。但是它的这个特点可以给我们带来很大的方便,比如说我们的页面有一个列表,而列表的数据是不断变化的,那么我们可以采用magicajax来处理,操作很简单,添加magicajax之后,将要更新的列表控件放在magicajax的控件之内,然后在pageload里面定义更新间隔的时间就ok了,atlas的原理和magicajax差不多。但是,需要注意的一个问题是,这几种框架都只支持IE,没有进行浏览器兼容方面的处理,用反编译工具察看他们的代码就可以知道。

 除了这几种框架之外,我们平时用到的比较多的方式是自己创建xmlHttpRequest对象,这种方式和前面的几种框架相比更具有灵活性。另外,在这里还提一下aspnet2.0自带的异步回调接口,它和ajax一样也可以实现局部的无刷新,但它的实现实际上也是基于xmlhttprequest对象的,另外也是只支持IE,当然这是微软的一个竞争策略。

 

10ajax示例

验证用户名是否注册。

采用两种方式

1 ajax.dll

2 自己写xmlhttprequest对象

 

分享到:
评论

相关推荐

    AJAX原理 原理 AJAX

    "AJAX原理与技术的深入分析" AJAX(Asynchronous JavaScript and XML)是一种异步通信技术,允许Web应用程序异步地从服务器请求数据,而不需要重新加载整个网页。下面我们将深入分析AJAX的原理、技术、意义和发展...

    关于ajax原理的ppt

    **Ajax原理的理解** Ajax,全称为Asynchronous JavaScript and XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它的出现极大地提升了Web应用程序的用户体验,因为它允许数据在后台与服务器...

    Ajax原理与系统开发》源码

    **Ajax原理详解** Ajax,全称为"Asynchronous JavaScript and XML",是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。Ajax的核心是JavaScript对象XMLHttpRequest,它允许在后台与服务器交换数据并...

    ajax ajax原理 ajax代码 ajax编程 ajax学习

    ### **Ajax 原理** Ajax的原理主要包含以下几个步骤: 1. **创建 XMLHttpRequest 对象**:这是Ajax的基础,现代浏览器通常都内置了XMLHttpRequest对象。 2. **开启一个HTTP请求**:使用XMLHttpRequest对象的`open()`...

    ajax原理及用法

    ### AJAX原理及用法 #### 一、什么是Ajax技术? Ajax(Asynchronous JavaScript and XML,异步JavaScript与XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据...

    ajax详解教程讲述ajax原理

    Ajax 详解教程讲述 Ajax 原理 Ajax 是一种异步 JavaScript 和 XML 技术,允许 Web 应用程序实时更新页面内容,而不需要重新加载整个页面。Ajax 技术的核心是使用 XMLHttpRequest 对象异步地从服务器获取数据,并...

    ajax原理,xmlHttpRequest

    ### AJAX原理与XMLHttpRequest详解 #### 一、引言 AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。其核心在于使用`XMLHttpRequest`...

    Ajax原理详细说明.doc

    Ajax原理的实现依赖于一系列技术的协同工作,包括HTML、JavaScript、DHTML(Dynamic HTML)和DOM(Document Object Model)。 HTML是网页的基础结构,它用于创建交互式表单,设置用户输入的元素。在Ajax应用中,...

    隐藏框架实现ajax原理

    在本项目中,“隐藏框架实现ajax原理”是一个演示如何利用隐藏iframe来实现Ajax交互的实例。下面我们将详细探讨Ajax的工作原理以及如何通过隐藏框架实现这一过程。 1. **Ajax工作原理**: Ajax的核心是JavaScript...

    Ajax原理详细说明

    Ajax原理的实现依赖于一系列技术的协同工作,包括HTML、JavaScript、DHTML(Dynamic HTML)和DOM(Document Object Model)。 HTML是网页的基础结构,它用于创建表单和其他元素,这些元素在Ajax交互中扮演着重要...

    AJAX原理及其在Web开发中的应用.pdf

    "AJAX原理及其在Web开发中的应用" AJAX(Asynchronous JavaScript and XML)是一种实现异步通信的技术,在Web开发中极为重要。本文将从AJAX的基本原理开始,逐步介绍AJAX的技术架构、主要组件、工作原理、优点和...

    ajax原理简介(包含例子说明)

    **Ajax原理简介** Ajax,全称"Asynchronous JavaScript and XML",是一种用于构建高度交互式Web应用程序的技术,使得页面能够在不完全刷新的情况下与服务器通信。它不是单一的技术,而是结合了多种技术,包括...

    ajax原理文档说明txt格式

    ### AJAX原理详解 #### 一、引言 随着互联网技术的发展与用户对交互体验需求的提升,异步请求成为Web开发中的重要组成部分。AJAX(Asynchronous JavaScript and XML)作为一种无需重新加载整个网页即可更新部分...

    AJAX原理[收集].pdf

    **AJAX原理详解** AJAX,全称Asynchronous JavaScript and XML,是一种用于创建快速动态网页的技术。它允许在不重新加载整个网页的情况下,与服务器交换数据并更新部分网页内容。这种技术极大地改善了用户的交互...

    ajax原理、JSON介绍

    4. **Ajax工作原理** - **触发事件**:用户操作(如点击按钮)启动Ajax事件。 - **创建XMLHttpRequest对象**:实例化对象,设置请求参数,如URL和HTTP方法(GET或POST),并发送请求。 - **服务器处理**:服务器...

    Ajax 原理和应用(培训资料)

    ### Ajax原理与应用知识点详解 #### 一、Ajax技术背景 - **背景介绍**:Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这项技术最早出现在2005年左右,...

    Ajax原理介绍

    Ajax原理介绍,详细介绍了ajax的工作原理!

    ajax原理及应用

    ajax原理及应用,概念,技术以及xmlhttprequest实例化

    原始ajax原理 jquery JDBC连接数据库返回JSON/XML/TEXT 的Demo

    1 原始ajax原理 2 jquery JDBC 3 json数据 4 三级联动 5 仿百度自动提示 6 fromValidator验证 其中自带jar包 修改 DBconfig Mysql数据库配置文件直接运行即可 方便大家学习 ~~~同时鄙视那些高分卖例子的人... ...

Global site tag (gtag.js) - Google Analytics