面試之ajax原理(轉載)

總結1javascript

總結2html

AJAX全稱爲「Asynchronous JavaScript and XML」(異步JavaScript和XML),是一種建立交互式網頁應用的網頁開發技術,java

是幾種原有技術的結合體。它由下列技術組合而成。web

   1.使用CSS和XHTML來表示。ajax

   2. 使用DOM模型來交互和動態顯示。小程序

   3.使用XMLHttpRequest來和服務器進行異步通訊。瀏覽器

   4.使用javascript來綁定和調用。安全

Ajax的原理簡單服務器

Ajax的工做原理至關於在用戶和服務器之間加了—箇中間層(AJAX引擎),使用戶操做與服務器響應異步化。並非全部的用戶請求都提交給服務器,像—些數據驗證和數據處理等都交給Ajax引擎本身來作, 只有肯定須要從服務器讀取新數據時再由Ajax引擎代爲向服務器提交請求。框架

Ajax的原理簡單來講經過XmlHttpRequest對象來向服務器發異步請求,從服務器得到數據,而後用javascript來操做DOM而更新頁面。這其中最關鍵的一步就是從服務器得到請求數據。要清楚這個過程和原理,咱們必須對 XMLHttpRequest有所瞭解。

XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支持異步請求的技術。簡單的說,也就是javascript能夠及時向服務器提出請求和處理響應,而不阻塞用戶。達到無刷新的效果。

  因此咱們先從XMLHttpRequest講起,來看看它的工做原理。

  首先,咱們先來看看XMLHttpRequest這個對象的屬性。

  它的屬性有:

  onreadystatechange  每次狀態改變所觸發事件的事件處理程序。

  responseText     從服務器進程返回數據的字符串形式。

  responseXML    從服務器進程返回的DOM兼容的文檔數據對象。

  status           從服務器返回的數字代碼,好比常見的404(未找到)和200(已就緒)

  status Text       伴隨狀態碼的字符串信息

  readyState       對象狀態值

0 (未初始化) 對象已創建,可是還沒有初始化(還沒有調用open方法)

1 (初始化) 對象已創建,還沒有調用send方法

2 (發送數據) send方法已調用,可是當前的狀態及http頭未知

3 (數據傳送中) 已接收部分數據,由於響應及http頭不全,這時經過responseBody和responseText獲取部分數據會出現錯誤,

4 (完成) 數據接收完畢,此時能夠經過經過responseXml和responseText獲取完整的迴應數據

ajax的優勢

   Ajax的給咱們帶來的好處你們基本上都深有體會,在這裏我只簡單的講幾點:

   一、最大的一點是頁面無刷新,在頁面內與服務器通訊,給用戶的體驗很是好。

  二、使用異步方式與服務器通訊,不須要打斷用戶的操做,具備更加迅速的響應能力。

  三、能夠把之前一些服務器負擔的工做轉嫁到客戶端,利用客戶端閒置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。而且減輕服務器的負擔,ajax的原則是「按需取數據」,能夠最大程度的減小冗餘請求,和響應對服務器形成的負擔。

  四、基於標準化的並被普遍支持的技術,不須要下載插件或者小程序。

八、ajax的缺點

  下面我着重講一講ajax的缺陷,由於平時咱們大多注意的都是ajax給咱們所帶來的好處諸如用戶體驗的提高。而對ajax所帶來的缺陷有所忽視。

  下面所闡述的ajax的缺陷都是它先天所產生的。

   一、ajax幹掉了back按鈕,即對瀏覽器後退機制的破壞。後退按鈕是一個標準的web站點的重要功能,可是它無法和js進行很好的合做。這是ajax所帶來的一個比較嚴重的問題,由於用戶每每是但願可以經過後退來取消前一次操做的。那麼對於這個問題有沒有辦法?答案是確定的,用過Gmail的知道,Gmail下面採用的ajax技術解決了這個問題,在Gmail下面是能夠後退的,可是,它也並不能改變ajax的機制,它只是採用的一個比較笨可是有效的辦法,即用戶單擊後退按鈕訪問歷史記錄時,經過建立或使用一個隱藏的IFRAME來重現頁面上的變動。(例如,當用戶在Google Maps中單擊後退時,它在一個隱藏的IFRAME中進行搜索,而後將搜索結果反映到Ajax元素上,以便將應用程序狀態恢復到當時的狀態。)

可是,雖說這個問題是能夠解決的,可是它所帶來的開發成本是很是高的,和ajax框架所要求的快速開發是相背離的。這是ajax所帶來的一個很是嚴重的問題。

 二、安全問題

技術同時也對IT企業帶來了新的安全威脅,ajax技術就如同對企業數據創建了一個直接通道。這使得開發者在不經意間會暴露比之前更多的數據和服務器邏輯。ajax的邏輯能夠對客戶端的安全掃描技術隱藏起來,容許黑客從遠端服務器上創建新的攻擊。還有ajax也難以免一些已知的安全弱點,諸如跨站點腳步攻擊、SQL注入攻擊和基於credentials的安全漏洞等。

  三、對搜索引擎的支持比較弱。

  四、破壞了程序的異常機制。至少從目前看來,像ajax.dll,ajaxpro.dll這些ajax框架是會破壞程序的異常機制的。關於這個問題,我曾經在開發過程當中遇到過,可是查了一下網上幾乎沒有相關的介紹。後來我本身作了一次試驗,分別採用ajax和傳統的form提交的模式來刪除一條數據……給咱們的調試帶來了很大的困難。

相關文章
相關標籤/搜索