`
prettyzhou
  • 浏览: 33540 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Ajax原理及其实现

阅读更多

1、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等其它数据类型,只是将这个过程封装了的结果,本质上他们并没有什么太大的区别。

 

2、ajax的优点

 

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

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

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

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

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

 

3、ajax的缺点

 

  下面我着重讲一讲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技术的网站时,它目前是不支持的,当然,这个问题和我们没太多关系。

 

分享到:
评论

相关推荐

    Ajax原理分析及其实现的简单代码

    让更多人了解ajax技术.function _open(requestUrl) { var xmlHttp = false; var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2....

    Ajax技术及其在STRUTS应用中的实现

    本文介绍了Ajax技术的原理及特点,并对采用STRUTS框架的Web应用中如何使用Ajax技术,通过异步数据交互的方式实现文本框输入渐进提示功能的方法进行了说明

    Ajax基础教程(扫描版)

    本书重点介绍ajax及相关的工具和技术,主要内容包括xmlhttprequest对象及其属性和方法、发送请求和处理响应、构建完备的ajax开发工具、使用jsunit测试javascript、分析javascript调试工具和技术,以及ajax开发模式和...

    论文研究-Ajax及其在三维WebGIS的研究与应用 .pdf

    Ajax及其在三维WebGIS的研究与应用,杨群,周云耀,介绍了Ajax的基本原理、主要技术、实现过程和优点。提出了在WebGIS中利用Ajax的异步交互来提高三维WebGIS的数据传输和交互,提高了数据�

    掌握Ajax.rar

    理解 Ajax 及其工作原理,构建网站的一种有效方法 Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本系列的作者是一位 Ajax 专家,他...

    JSONP跨域的原理解析及其实现介绍

    JavaScript这个安全策略在进行多iframe或多窗口编程、以及Ajax编程时显得尤为重要。根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在google.com域名下的页面内容;甚至不同的子域名之间的页面...

    DWR,Struts,Hibernate和Spring的J2EE架构开发大全

    Ajax技术及其DWR框架实现.pdf AJAX技术在基于web的信息管理系统中的应用.pdf DWR在基于Spring框架的Web应用中的研究.pdf J2EE平台上消息驱动Bean对客户的响应与回传的实现.pdf J2EE轻量级框架的研究与应用.pdf ...

    Ajax技术研究及其Web应用 (2010年)

    Ajax技术是多种现有技术的结合,通过浏览器与服务器之间的异步通信,实现了无刷新更新页面,提高了用户的体验。介绍了Ajax的技术原理、核心技术及工作流程,列举了Ajax技术一些典型应用,并指出Ajax的发展趋势。

    基于Java的宠物销售系统的设计与实现【附源码】

    接着对城市宠物管理系统进行了概要设计,在概要设计中,给出了系统在非功能性方面的关键技术及其解决方案,并对系统的主要功能及其处理流程进行详细的叙述。同时,对系统的数据库进行了分析和设计,其中包括对系统...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    集合及其运算 文件读与写详解 心灵鸡汤 文件修改详解 字符编码转换详解 函数与函数式编程 函数式编程之参数详解 局部变量与全局变量作用域 递归 函数式编程与函数不同 高阶函数 第4周 上节内容回顾 心灵鸡汤 装饰...

    基于Ajax技术的远程监控动态网页设计 (2009年)

    介绍了Ajax的基本概念及其工作原理和关键技术,详细阐述了基于Ajax 技术的动态网页设计过程。 通过Access 数据库实现对现场运行系统的远程监控,将生产现场数据实时发布到网页,通过Ajax 技术实现网页的动 态无闪烁刷新...

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

    7.2.2 webcontrol基类对样式的支持功能及其工作原理 249 7.2.3 htmltextwriter类对控件样式的支持 252 7.2.4 定义控件内部的样式属性规则 253 7.2.5 两个常用转换方法 256 7.3 应用示例 260 7.3.1 复合控件样式...

    HTML5精粹:利用HTML5开发令人惊奇的Web站点和革命性应用 pdf扫描版

    第13章介绍了HTML5中的Ajax、跨文档消息传递、Web套接字等通信技术的原理,以及它们的API;第14章讲解了HTML5中Web Workers的使用方法和实现原理,以及它的API;第15章和第16章介绍了HTML5中的历史接口和脱机功能,...

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

    7.2.2 webcontrol基类对样式的支持功能及其工作原理 249 7.2.3 htmltextwriter类对控件样式的支持 252 7.2.4 定义控件内部的样式属性规则 253 7.2.5 两个常用转换方法 256 7.3 应用示例 260 7.3.1 复合控件样式...

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

    7.2.2 webcontrol基类对样式的支持功能及其工作原理 249 7.2.3 htmltextwriter类对控件样式的支持 252 7.2.4 定义控件内部的样式属性规则 253 7.2.5 两个常用转换方法 256 7.3 应用示例 260 7.3.1 复合控件样式...

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

    7.2.2 webcontrol基类对样式的支持功能及其工作原理249 7.2.3 htmltextwriter类对控件样式的支持252 7.2.4 定义控件内部的样式属性规则253 7.2.5 两个常用转换方法256 7.3 应用示例260 7.3.1 复合控件样式及...

    前端Javascript相关面试基础问答整理md

    6. new的原理 7. 如何正确判断this? 8. 闭包及其作用 9. 原型和原型链 10. prototype与__proto__的关系与区别 11. 继承的实现方式及比较 12. 深拷贝与浅拷贝 13. 防抖和节流 14. 作用域和作用域链、执行期上下文 15...

    asp.net知识库

    运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中...

    基于JQuery框架的Web查询视图设计与实现

    JQuery是一个优秀的可跨浏览器的JavaScript框架, 它强化HTML与JavaScript之间的操作, 同时又...本文阐述JQuery框架的概念和原理, 通过JavaWeb应用程序中查询组件的实例, 解析该框 架在软件开发中的应用过程及其特性。

    计算机专业毕设精选-ASP人才招聘系统设计(源代码+论文).rar

    项目提供了完整的源代码和详细的设计论文,旨在帮助学习者深入了解ASP技术原理及其实际应用。同时,该项目具备高度的可定制性和二次开发潜力,非常适合作为毕业设计或课程设计的实践项目。 **功能特点:** 1. **...

Global site tag (gtag.js) - Google Analytics