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方式,在不須要提交大量數據的狀況下,這種方式可以解決您的大部分問題。

相關文章
相關標籤/搜索