標籤:style http color os io 使用 java ar strong
ajax是非同步 JavaScript 和 XML。通過在後台與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。
互動流程:
1--啟動 擷取XMlHttpRequest對象
2--open 開啟url通道,並設定非同步傳輸
3--send 發送資料到伺服器
4--伺服器接受資料並處理,處理完成後返回結果
5--用戶端接收伺服器端返回
同步和非同步
同步:指令碼會停留並等待伺服器發送回複然後再繼續
非同步:指令碼允許頁面繼續其進程並處理可能的回複
Ajax跨域問題:
如果在A網站中,我們希望使用Ajax來獲得B網站中的特定內容,如果A網站與B網站不在同一個域中,那麼就出現了跨域訪問問題。
IE對於跨域訪問的處理是,彈出警告框,提醒使用者。如果使用者將該網站納入可信任網站,或者調低安全層級,那麼這個問題IE就不會在提醒你。
FireFox等其它非微軟的瀏覽器遇到跨域訪問,則解決方案統一是拒絕訪問。
幾個可行的方案:
1、Web代理的方式。即使用者訪問A網站時所產生的對B網站的跨域訪問請求均提交到A網站的指定頁面,由該頁面代替使用者頁面完成互動,從而返回合適的結果。此方案可以解決現階段所能夠想到的多數跨域訪問問題,但要求A網站提供Web代理的支援,因此A網站與B網站之間必須是緊密協作的,且每次互動過程,A網站的伺服器負擔增加,且無法代使用者儲存session狀態。
2、on-Demand方式。MYMSN的門戶就用的這種方式,不過MYMSN中不涉及跨域訪問問題。動態控制script標記的產生,通過修改script標記的src屬性完成對跨域頁面的調用。此方案存在的缺陷是,script的src屬性完成該調用時採取的方式時get方式,如果請求時傳遞的字串過大時,可能會無法正常運行。不過此方案非常適合彙總類門戶使用。
3、iframe方式。查看過醒來在javaeye上的一篇關於跨域訪問的文章,他提到自己已經用iframe的方式解決了跨域訪問問題。資料提交跟擷取,採用iframe這種方式的確可以了,但由於父視窗與子視窗之間不能互動(跨域訪問的情況下,這種互動被拒絕),因此無法完成對父視窗效果的影響。
4、使用者本地轉儲方式:IE本身依附於windows平台的特性為我們提供了一種基於iframe,利用記憶體來“繞行”的方案,即兩個window之間可以在用戶端通過windows剪貼簿的方式進行資料轉送,只需要在接受資料的一方設定Interval進行輪詢,獲得結果後清除Interval即可。FF的平台獨立性決定了它不支援剪貼簿這種方式,而以往版本的FF中存在的外掛程式漏洞又被fixed了,所以FF無法通過記憶體來完成暗渡陳倉。而由於檔案操作FF也沒有提供支援(無法通過Cookie跨域完成資料傳遞),致使這種技巧性的方式只能在IE中使用。
5、結合了前面幾種方式,在訪問A網站時,先請求B網站完成資料處理,再根據返回的標識來獲得所需的結果。這種方法的缺點也很明顯,B網站的負載增大了。優點,對session也實現了保持,同時A網站與B網站頁面間的互動能力增強了。最重要的一點,這種方案滿足了我的全部需要。
總結一下,以上方案中可選擇的情況下,我最推薦on-Demand方式,在不需要提交大量資料的情況下,這種方式能夠解決您的大部分問題。
AJAX是什麼? AJAX的互動模型(流程)?同步和非同步區別? AJAX跨域的解決辦法?