ajax优点缺点,ajax json优缺点
Ajax的优点和缺点
Ajax的优点和缺点
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。
对应用Ajax最主要的缺点就是,它可能破坏浏览器后退按钮的正常行为
因为Ajax中采用了xml技术,所以在Ajax中也可能问到XML的问题
拓展:
1、ajax技术的背景
不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth、google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行。而这也让微软感到无比的尴尬,因为早在97年,微软便已经发明了 ajax中的关键技术,并且在99年IE5推出之时,它便开始支持XmlHttpRequest对象,并且微软之前已经开始在它的一些产品中应用 ajax,比如说MSDN网站菜单中的一些应用。遗憾的是,不知道出于什么想法,当时微软发明了ajax的核心技术之后,并没有看到它的潜力而加以发展和推广,而是将它搁置起来。对于这一点来说,我个人是觉得非常奇怪的,因为以微软的资源和它的战略眼光来说,应该不会看不到ajax技术的前景,唯一的解释也许就是因为当时它的主要竞争对手Netscape的消失反而使它变得麻痹和迟钝,毕竟巨人也有打盹的时候,比如IBM曾经在对微软战略上的失误。正是这一次的失误,成就了它现在的竞争对手google在ajax方面的领先地位,而事实上google目前在ajax技术方面的'领先是微软所无法达到的,这一点在后面我讲述ajax缺陷的时候也会提到。现在微软也意识到了这个问题,因此它也开始在ajax领域奋起直追,比如说推出它自己的ajax框架 atlas,并且在.NET2.0也提供了一个用来实现异步回调的接口,即ICallBack接口。那么微软为什么对自己在ajax方面的落后如此紧张呢?现在就让我们来分析一下ajax技术后面隐藏的深刻意义。
2、ajax技术的意义
我们在平时的开发中都多多少少的接触或者应用到了ajax,谈到ajax技术的意义,我们关注得最多的毫无疑问是提升用户的体验。但是,如果我们结合将来电脑和互联网的发展趋势,我们会发现ajax技术在某些方面正好代表了这种趋势。为什么这样说呢?我们知道,自从电脑出现以来,一直是桌面软件占据着绝对主导的地位,但是互联网的出现和成功使这一切开始发生着微妙的变化。相当一部分的人都相信,迟早有一天,数据和电脑软件将会从桌面转移到互联网。也就是说,将来的电脑有可能抛弃笨重的硬盘,而直接从互联网来获取数据和服务,我记得我念大学的时候,有位教授给我们上课的时候,曾经设想过这样一种情景,也许在将来的电脑桌面上,没有任何多余的软件和程序,而仅仅只有一个IE,虽然现在看起来我们距离这一天还很遥远,并且这其中还有很多的问题需要解决,但是我觉得这个并非梦想,而是迟早将实现的现实。那么,这其中的主要问题就是互联网的连接不稳定,谁也不愿意看着自己的电脑从服务器一点一滴的下载数据,那么,ajax是不是解决了这个问题呢,说实话,与其说ajax解决了这个问题,倒不如它只是掩盖了这个问题,它只是在服务器和客户端之间充当了一个缓冲器,让用户误以为服务没有中断。精确的说,ajax并不能提高从服务器端下载数据的速度,而只是使这个等待不那么令人沮丧。但是正是这一点就足以产生巨大的影响和震动,它实际上也对桌面软件产生了巨大的冲击。这一点我用一个例子来说明,我们可以比较一下Outlook Express和Gmail,前者是典型的桌面软件,后者是ajax所实现的B/S模式,实际上后者目前已经在慢慢取代前者了,Gmail在收发邮件的时候已经和Outlook Express的功能几乎没有差别了,而且它不需要安装客户端程序。这就是为什么微软对ajax所带来的冲击有着如此的恐惧心理,并且在它前不久所进行的调查之中,将google看做他们未来十年内的主要竞争对手的主要原因之一。当然,这种变化也并不会将桌面软件全部淘汰,现有的浏览器还没有一个能像 PhotoShop等桌面程序那样处理复杂的图像。但是我们也不能忽视它带来的影响和冲击。
;
Ajax的优点和缺点?
优点:能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
缺点:破坏浏览器的后退与加入收藏书签功能。一个被完整读入的页面与一个已经被动态修改过的页面之间的可能差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。
应用
Ajax前景非常乐观,可以提高系统性能,优化用户界面。Ajax现有直接框架AjaxPro,可以引入AjaxPro.2.dll文件,可以直接在前台页面JavaScript调用后台页面的方法。但此框架与表单验证有冲突。另外微软也引入了Ajax组件,需要添加AjaxControlToolkit。dll文件,可以在控件列表中出现相关控件。
以上内容参考:百度百科-ajax
AJAX:论述同步通信方式和异步通信方式的优缺点及使用场景
ajax同步:程序一直按顺序执行下去。可控符合逻辑无bug。 步骤。提交请求执行事件。事件执行请求服务器处理。服务器处理完毕返回事件继续执行或者结束。
ajax异步:程序一同执行。状态默认不可控。使用回调才能变成可控状态。步骤。提交请求。执行事件。请求服务器处理。事件继续执行。
通俗点说。就是同步数据会按流程走。异步有可能服务器的数据没返回。事件已经执行走了。异步会有一个执行时间的问题。而同步没有
Ajax的核心是什么
术语Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验。在Ajax之前,Web站点强制用户进入提交/等待/重新显示范例,用户的动作总是与服务器的“思考时间”同步。Ajax提供与服务器异步通信的能力,从而使用户从请求/响应的循环中解脱出来。借助于Ajax,可以在用户单击按钮时,使用JavaScript和DHTML立即更新UI,并向服务器发出异步请求,以执行更新或查询数据库。当请求返回时,就可以使用JavaScript和CSS来相应地更新UI,而不是刷新整个页面。最重要的是,用户甚至不知道浏览器正在与服务器通信:Web站点看起来是即时响应的。
虽然Ajax所需的基础架构已经出现了一段时间,但直到最近异步请求的真正威力才得到利用。能够拥有一个响应极其灵敏的Web站点确实激动人心,因为它最终允许开发人员和设计人员使用标准的HTML/CSS/JavaScript堆栈创建“桌面风格的(desktop-like)”可用性。
通常,在J2EE中,开发人员过于关注服务和持久性层的开发,以至于用户界面的可用性已经落后。在一个典型的J2EE开发周期中,常常会听到这样的话,“我们没有可投入UI的时间”或“不能用HTML实现”。但是,以下Web站点证明,这些理由再也站不住脚了:
BackPack
Google Suggest
Google Maps
PalmSphere
所有这些Web站点都告诉我们,Web应用程序不必完全依赖于从服务器重新载入页面来向用户呈现更改。一切似乎就在瞬间发生。简而言之,在涉及到用户界面的响应灵敏度时,基准设得更高了。
定义Ajax
Adaptive Path公司的Jesse James Garrett这样定义Ajax:
Ajax不是一种技术。实际上,它由几种蓬勃发展的技术以新的强大方式组合而成。Ajax包含:
基于CSS标准的表示;
使用Document Object Model进行动态显示和交互;
使用XMLHttpRequest与服务器进行异步通信;
使用JavaScript绑定一切。
这非常好,但为什么要以Ajax命名呢?其实术语Ajax是由Jesse James Garrett创造的,他说它是“Asynchronous JavaScript + XML的简写”。
Ajax的工作原理
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
1 AJAX还是AJAH
* AJAX的很多经典应用其实都是利用xmlhttp空间访问后台程序,后台程序返回脚本用eval回调或者返回简单数据的方式来开发。这样的开发模式的好处是设计简单轻巧,对熟悉dhtml的开发者来说上手会比较块,跨浏览器问题也容易解决,做简单的应用也够用。gmail,google suggest都是用这种方式。但是在我看来gmail已经吧AJAH应用到极限了,更复杂的数据结构用简单数据和回调方式来组织就开始有点力不从心了。
* 前AJAX的一种传统做法是后台返回完整的xml文件后用脚本(利用控件)解析xml后操作页面的dom节点来动态生成页面的一部分。这样作的优点是可以充分利用xml的强大表达能力传输各种数据结构,缺点是页面的dom操作效率不高,而且IE在dom操作的API上bug多多。之所以叫“前AJAX”,因为我们在AJAX这个名词出现前已经这样做了很多年了。
* AJAX另一种传统做法是后台返回完整的xml文件后用脚本(利用控件)解析xml后生成html代码再灌回页面的层中。这样的做法回避了页面dom操作的一些问题,在生成的内容比较多的时候利用一些字符串计算的优化技巧(主要是数组和正则的应用)可以相当高效的生成页面。在我看来这是未来的发展趋势。
我现在的项目主要采用的是第三种方式,结合第二种。我使用的是自己的一个小巧的框架,模拟jsp的语法来生成html代码,但是依赖于浏览器的xml解析API,因此难以跨浏览器。google的开源项目ajaxslt提供了一个纯js的xslt解决方式,功能更强大,可以在页面中局部的应用xslt解析xml生成html或者其他形式的数据,但是带来了xslt这个技术门槛。sf上的ZK似乎也不错,但是带来的是xul这个技术门槛,同时后台被绑定在了J2EE服务器上面。
2 CACHE
如果使用xmlhttp控件,在发起http请求的时候IE会包办cache策略,很多时候更新了数据却无法获得更新后的数据。一开始试图用传统方式在URL后面加随机数来强制更新,但是IE仍然距不发出新的请求。
一个解决方法是在后台写expires: 0或者其他的禁止前台cache的头,但是这样在数据没有更新的时候又会带来不必要的服务器压力、响应延迟和带宽浪费。
一个稍微好一点的解决方法是,前台在提交数据以后,需要强制更新数据的时候:
xmlhttp.setRequestHeader("If-Modified-Since","0");
3 系统错误: -1072896748。
用xmlhttp接收到数据的时候经常是用xmldom.loadXML(xmlhttp.responseXML.xml)来判断返回的数据的正确性,但是如果后台送过来不正确的xml的时候有时回触发-1072896748系统错误。这是因为xmlhttp.responseXML已经没有解析到东西了,我们还试图访问它的xml属性而触发的。
解决的方法是在使用responseXML.xml 或者 responseText的时候要做try/catch:
try{var tmp = xmlhttp.responseXML.xml}catch(ex){err=true;}
有些人喜欢catch的时候判断 exception.description=="系统错误: -1072896748。" , 如果客户端不是简体中文版的系统的时候就判断不到了。其实这个地方只要有异常,都必须走异常处理流程了,不用区分的那么仔细。