AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?

ajax是异步的 JavaScript 和 XML。经过在后台与服务器进行少许数据交换,AJAX 可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行更新。java

交互流程:

     1--启动  获取XMlHttpRequest对象
             2--open 打开url通道,并设置异步传输 
             3--send 发送数据到服务器
             4--服务器接受数据并处理,处理完成后返回结果 
             5--客户端接收服务器端返回
ajax

同步和异步

同步:脚本会停留并等待服务器发送回复而后再继续windows

异步:脚本容许页面继续其进程并处理可能的回复跨域

Ajax跨域问题:


若是在A网站中,咱们但愿使用Ajax来得到B网站中的特定内容,若是A网站与B网站不在同一个域中,那么就出现了跨域访问问题。浏览器

IE对于跨域访问的处理是,弹出警告框,提醒用户。若是用户将该网站归入可信任网站,或者调低安全级别,那么这个问题IE就不会在提醒你。安全

FireFox等其它非微软的浏览器遇到跨域访问,则解决方案统一是拒绝访问。服务器

几个可行的方案:session

一、Web代理的方式。即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案能够解决现阶段所可以想到的多数跨域访问问题,但要求A网站提供Web代理的支持,所以A网站与B网站之间必须是紧密协做的,且每次交互过程,A网站的服务器负担增长,且没法代用户保存session状态。异步

二、on-Demand方式。MYMSN的门户就用的这种方式,不过MYMSN中不涉及跨域访问问题。动态控制script标记的生成,经过修改script标记的src属性完成对跨域页面的调用。此方案存在的缺陷是,script的src属性完成该调用时采起的方式时get方式,若是请求时传递的字符串过大时,可能会没法正常运行。不过此方案很是适合聚合类门户使用。网站

三、iframe方式。查看过醒来在javaeye上的一篇关于跨域访问的帖子,他提到本身已经用iframe的方式解决了跨域访问问题。数据提交跟获取,采用iframe这种方式的确能够了,但因为父窗口与子窗口之间不能交互(跨域访问的状况下,这种交互被拒绝),因此没法完成对父窗口效果的影响。

四、用户本地转储方式:IE自己依附于windows平台的特性为咱们提供了一种基于iframe,利用内存来“绕行”的方案,即两个window之间能够在客户端经过windows剪贴板的方式进行数据传输,只须要在接受数据的一方设置Interval进行轮询,得到结果后清除Interval便可。FF的平台独立性决定了它不支持剪贴板这种方式,而以往版本的FF中存在的插件漏洞又被fixed了,因此FF没法通过内存来完成暗渡陈仓。而因为文件操做FF也没有提供支持(没法经过Cookie跨域完成数据传递),导致这种技巧性的方式只能在IE中使用。

五、结合了前面几种方式,在访问A网站时,先请求B网站完成数据处理,再根据返回的标识来得到所需的结果。这种方法的缺点也很明显,B网站的负载增大了。优势,对session也实现了保持,同时A网站与B网站页面间的交互能力加强了。最重要的一点,这种方案知足了个人所有须要。

总结一下,以上方案中可选择的状况下,我最推荐on-Demand方式,在不须要提交大量数据的状况下,这种方式可以解决您的大部分问题。

相关文章
相关标签/搜索