======================================================
注:本文源代码点此下载
======================================================
1.隐藏帧(hidden frame)技术
使用隐藏帧的最大争论之一是它可以维护浏览器的历史,因而使得用户仍然能够使用浏览器上的后退和前进按钮.浏览器由于并不知道隐藏帧实际上被隐藏了,但对于其所发出的请求仍然是记录在案的.然而,ajax应用程序的主页面上却没有修改,隐藏帧中的修改意味着后退和前进按钮将依据该隐藏帧的讯问历史而进主页面来变化.这正是gmail和google maps使用该技术的理由.
隐藏帧也有一些缺点.例如:无法向域外的服务器发送请求就是其中一个缺点.这是因为受到浏览器安全机制限制,javascript只能与同个域的表单交互.
隐藏帧技术另外一个不利的方面是,对其背后发生的事了解甚少.它完全依赖于返回的正确页面.如果隐藏帧的页面载入失败,并不会向用户提示出错消息;主页面将继续等待直到调用适当的javascript函数.必须通过设置一个较长周期(可能是5分钟)的超时时间,然后如果页面仍然没有成功载入则显示一条消息,以给用户一个安慰.但这只是一个权宜之计,最主要的问题是,对于背后所发生的http请求缺乏足够的信息.幸好,我们还有其它选择.
2.xmlhttprequest
编写的代码很清晰,而且代码的意图也比使用隐藏帧中大量的回调函数更易于理解.不仅可以访问访问请求和响应首部,还能够访问http状态码,这使你可以判断请求处理是否成功.
不利的一面是,它不像隐藏帧技术,当发出调用时并没有浏览器的历史刻录保存下来.浏览器的后退和前进按钮并没有和xhr请求绑定在一下,因此将会失去效.正是因为这个原因,许多ajax应用程序将xhr请求和隐藏帧技术结合使用,以生成一个更加可用的用户界面.
另一个缺点只体现在ie上,它只求必须启用activex控件.如果用户将你的页面设置为特定的安全区域,区域禁用activex控件,这将使得你无法访问xhr对象.
xhr在跨域通信时也会受到限制.
3.基于图像的ajax
优点:
a.不仅现代浏览器能够支持,一些较旧版本的浏览器也能够支持,具有很好的兼容性.
b.与隐藏帧不同,当请求执行成功或失败时会有一些提示.
c.基于图像来实现ajax还有一个好处,它与隐藏帧和xhr不同,基于图像的方法可以访问任何服务器上的图像文件,页面不仅限于页面所在域.
缺点:
a.最主要的缺点是图像只能够发送get请求,因此发送给服务器的数据受限于浏览器支持的url的长度(通常是2mb).当使用cookie时,从服务器返回的数据量显然也是有限的(每个cookie最多保存512个字节)
b.客户端有可能禁用图像功能
c.还要注意有些用户会禁用cookie,因此有任何基于cookie的ajax解决方案中,首先应该检查浏览器是否支持cookie.
4.动态脚本载入
优点:
a.首先,与使用图像相似,它可以访问其他服务器端的文件.这对于一个多域的环境而方言是一个很强大的功能.
b.此外,动态脚本载入提供了对服务器端计算结果执行任意javascript代码的能力.你并不仅限于使用一个回调函数;可以使用任意个回调函数来实现预期的结果.
缺点:
a.举例来说,在通信启动后的所有执行过程中没有任何反馈.例如:如果访问的文件并不存在,你却没有办法从服务器接收一个404错误.你的网站或应用程序可能一直在等,因为回调函数还没有被调用.
b.同样,使用该技术也无法发送post请求,而只能发送get请求,这样也就极大地限制了可以发磅的数据量.这种技术也存在安全问题:要确保不要通过动态脚本技术发送诸如密码之类的私密数据,因为这些信息能够很容易地从查询字符串中获取.
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/