华南俳烁实业有限公司

java

當(dāng)前位置:中華考試網(wǎng) >> java >> java教程 >> 文章內(nèi)容

ajax技術(shù)和原理

來源:中華考試網(wǎng)  [2020年10月19日]  【

  ajax技術(shù)和原理也是學(xué)習(xí)Java WEB開發(fā)里非常重要的一部分,沒有接觸過這個(gè)方面的人可能不太懂其中jax包含的技術(shù),那么下面就告訴大家ajax技術(shù)和原理。

  jax所包含的技術(shù)

  大家都知道ajax并非一種新的技術(shù),而是幾種原有技術(shù)的結(jié)合體。它由下列技術(shù)組合而成。

  1.使用CSS和XHTML來表示。

  2. 使用DOM模型來交互和動(dòng)態(tài)顯示。

  3.使用XMLHttpRequest來和服務(wù)器進(jìn)行異步通信。

  4.使用javascript來綁定和調(diào)用。

  在上面幾中技術(shù)中,除了XmlHttpRequest對(duì)象以外,其它所有的技術(shù)都是基于web標(biāo)準(zhǔn)并且已經(jīng)得到了廣泛使用的,XMLHttpRequest雖然目前還沒有被W3C所采納,但是它已經(jīng)是一個(gè)事實(shí)的標(biāo)準(zhǔn),因?yàn)槟壳皫缀跛械闹髁鳛g覽器都支持它。

  ajax原理和XmlHttpRequest對(duì)象

  Ajax的原理簡(jiǎn)單來說通過XmlHttpRequest對(duì)象來向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用javascript來操作 DOM而更新頁面。這其中最關(guān)鍵的一步就是從服務(wù)器獲得請(qǐng)求數(shù)據(jù)。要清楚這個(gè)過程和原理,我們必須對(duì) XMLHttpRequest有所了解。

  XMLHttpRequest是ajax的核心機(jī)制,它是在IE5中首先引入的,是一種支持異步請(qǐng)求的技術(shù)。簡(jiǎn)單的說,也就是javascript可以及時(shí)向服務(wù)器提出請(qǐng)求和處理響應(yīng),而不阻塞用戶。達(dá)到無刷新的效果。

  所以我們先從XMLHttpRequest講起,來看看它的工作原理。

  首先,我們先來看看XMLHttpRequest這個(gè)對(duì)象的屬性。

  它的屬性有:

  onreadystatechange 每次狀態(tài)改變所觸發(fā)事件的事件處理程序。

  responseText 從服務(wù)器進(jìn)程返回?cái)?shù)據(jù)的字符串形式。

  responseXML 從服務(wù)器進(jìn)程返回的DOM兼容的文檔數(shù)據(jù)對(duì)象。

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

  status Text 伴隨狀態(tài)碼的字符串信息

  readyState 對(duì)象狀態(tài)值

  0 (未初始化) 對(duì)象已建立,但是尚未初始化(尚未調(diào)用open方法)

  1 (初始化) 對(duì)象已建立,尚未調(diào)用send方法

  2 (發(fā)送數(shù)據(jù)) send方法已調(diào)用,但是當(dāng)前的狀態(tài)及http頭未知

  3 (數(shù)據(jù)傳送中) 已接收部分?jǐn)?shù)據(jù),因?yàn)轫憫?yīng)及http頭不全,這時(shí)通過responseBody和responseText獲取部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)錯(cuò)誤,

  4 (完成) 數(shù)據(jù)接收完畢,此時(shí)可以通過通過responseXml和responseText獲取完整的回應(yīng)數(shù)據(jù)。

  ajax的優(yōu)點(diǎn)

  Ajax的給我們帶來的好處大家基本上都深有體會(huì),在這里我只簡(jiǎn)單的講幾點(diǎn):

  1、最大的一點(diǎn)是頁面無刷新,在頁面內(nèi)與服務(wù)器通信,給用戶的體驗(yàn)非常好。

  2、使用異步方式與服務(wù)器通信,不需要打斷用戶的操作,具有更加迅速的響應(yīng)能力。

  3、可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和寬帶租用成本。并且減輕服務(wù)器的負(fù)擔(dān),ajax的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請(qǐng)求,和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān)。

  4、基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載插件或者小程序。

  ajax的缺點(diǎn)

  下面我著重講一講ajax的缺陷,因?yàn)槠綍r(shí)我們大多注意的都是ajax給我們所帶來的好處諸如用戶體驗(yàn)的提升。而對(duì)ajax所帶來的缺陷有所忽視。

  下面所闡述的ajax的缺陷都是它先天所產(chǎn)生的。

  1、ajax干掉了back按鈕,即對(duì)瀏覽器后退機(jī)制的破壞。后退按鈕是一個(gè)標(biāo)準(zhǔn)的web站點(diǎn)的重要功能, 但是它沒法和js進(jìn)行很好的合作。這是ajax所帶來的一個(gè)比較嚴(yán)重的問題,因?yàn)橛脩敉窍M軌蛲ㄟ^后退來取消前一次操作的。那么對(duì)于這個(gè)問題有沒有 辦法?答案是肯定的,用過Gmail的知道,Gmail下面采用的ajax技術(shù)解決了這個(gè)問題,在Gmail下面是可以后退的,但是,它也并不能改變 ajax的機(jī)制,它只是采用的一個(gè)比較笨但是有效的辦法,即用戶單擊后退按鈕訪問歷史記錄時(shí),通過創(chuàng)建或使用一個(gè)隱藏的IFRAME來重現(xiàn)頁面上的變 更。(例如,當(dāng)用戶在Google Maps中單擊后退時(shí),它在一個(gè)隱藏的IFRAME中進(jìn)行搜索,然后將搜索結(jié)果反映到Ajax元素上,以便將應(yīng)用程序狀態(tài)恢復(fù)到當(dāng)時(shí)的狀態(tài)。)

  但是,雖然說這個(gè)問題是可以解決的,但是它所帶來的開發(fā)成本是非常高的,和ajax框架所要求的快速開發(fā)是相背離的。這是ajax所帶來的一個(gè)非常嚴(yán)重的問題。

  2、安全問題

  技術(shù)同時(shí)也對(duì)IT企業(yè)帶來了新的安全威脅,ajax技術(shù)就如同對(duì)企業(yè)數(shù)據(jù)建立了一個(gè)直 接通道。這使得開發(fā)者在不經(jīng)意間會(huì)暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯。ajax的邏輯可以對(duì)客戶端的安全掃描技術(shù)隱藏起來,允許黑客從遠(yuǎn)端服務(wù)器上建立新 的攻擊。還有ajax也難以避免一些已知的安全弱點(diǎn),諸如跨站點(diǎn)腳步攻擊、SQL注入攻擊和基于credentials的安全漏洞等。

  3、對(duì)搜索引擎的支持比較弱。

  4、破壞了程序的異常機(jī)制。至少從目前看來,像ajax.dll,ajaxpro.dll這些ajax框架是會(huì)破壞程序的異常機(jī)制的。關(guān)于這個(gè) 問題,我曾經(jīng)在開發(fā)過程中遇到過,但是查了一下網(wǎng)上幾乎沒有相關(guān)的介紹。后來我自己做了一次試驗(yàn),分別采用ajax和傳統(tǒng)的form提交的模式來刪除一條 數(shù)據(jù)……給我們的調(diào)試帶來了很大的困難。

  5、另外,像其他方面的一些問題,比如說違背了url和資源定位的初衷。例如,我給你一個(gè)url地址,如果采用了ajax技術(shù),也許你在該url地址下面看到的和我在這個(gè)url地址下看到的內(nèi)容是不同的。這個(gè)和資源定位的初衷是相背離的。

  6、一些手持設(shè)備(如手機(jī)、PDA等)現(xiàn)在還不能很好的支持ajax,比如說我們?cè)谑謾C(jī)的瀏覽器上打開采用ajax技術(shù)的網(wǎng)站時(shí),它目前是不支持的,當(dāng)然,這個(gè)問題和我們沒太多關(guān)系。

  7、ajax的優(yōu)點(diǎn)

  Ajax的給我們帶來的好處大家基本上都深有體會(huì),在這里我只簡(jiǎn)單的講幾點(diǎn):

  1、最大的一點(diǎn)是頁面無刷新,在頁面內(nèi)與服務(wù)器通信,給用戶的體驗(yàn)非常好。

  2、使用異步方式與服務(wù)器通信,不需要打斷用戶的操作,具有更加迅速的響應(yīng)能力。

  3、可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和寬帶租用成本。并且減輕服務(wù)器的負(fù)擔(dān),ajax的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請(qǐng)求,和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān)。

  4、基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載插件或者小程序。

  8、ajax的缺點(diǎn)

  下面我著重講一講ajax的缺陷,因?yàn)槠綍r(shí)我們大多注意的都是ajax給我們所帶來的好處諸如用戶體驗(yàn)的提升。而對(duì)ajax所帶來的缺陷有所忽視。

  下面所闡述的ajax的缺陷都是它先天所產(chǎn)生的。

  1、ajax干掉了back按鈕,即對(duì)瀏覽器后退機(jī)制的破壞。后退按鈕是一個(gè)標(biāo)準(zhǔn)的web站點(diǎn)的重要功能,但是它沒法和js進(jìn)行很好的合作。這是ajax所帶來的一個(gè)比較嚴(yán)重的問題,因?yàn)橛脩敉窍M軌蛲ㄟ^后退來取消前一次操作的。那么對(duì)于這個(gè)問題有沒有辦法?答案是肯定的,用過Gmail的知道,Gmail下面采用的ajax技術(shù)解決了這個(gè)問題,在Gmail下面是可以后退的,但是,它也并不能改變ajax的機(jī)制,它只是采用的一個(gè)比較笨但是有效的辦法,即用戶單擊后退按鈕訪問歷史記錄時(shí),通過創(chuàng)建或使用一個(gè)隱藏的IFRAME來重現(xiàn)頁面上的變更。(例如,當(dāng)用戶在Google Maps中單擊后退時(shí),它在一個(gè)隱藏的IFRAME中進(jìn)行搜索,然后將搜索結(jié)果反映到Ajax元素上,以便將應(yīng)用程序狀態(tài)恢復(fù)到當(dāng)時(shí)的狀態(tài)。)

  但是,雖然說這個(gè)問題是可以解決的,但是它所帶來的開發(fā)成本是非常高的,和ajax框架所要求的快速開發(fā)是相背離的。這是ajax所帶來的一個(gè)非常嚴(yán)重的問題。

  2、安全問題

  技術(shù)同時(shí)也對(duì)IT企業(yè)帶來了新的安全威脅,ajax技術(shù)就如同對(duì)企業(yè)數(shù)據(jù)建立了一個(gè)直接通道。這使得開發(fā)者在不經(jīng)意間會(huì)暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯。ajax的邏輯可以對(duì)客戶端的安全掃描技術(shù)隱藏起來,允許黑客從遠(yuǎn)端服務(wù)器上建立新的攻擊。還有ajax也難以避免一些已知的安全弱點(diǎn),諸如跨站點(diǎn)腳步攻擊、SQL注入攻擊和基于credentials的安全漏洞等。

  3、對(duì)搜索引擎的支持比較弱。

  4、破壞了程序的異常機(jī)制。至少從目前看來,像ajax.dll,ajaxpro.dll這些ajax框架是會(huì)破壞程序的異常機(jī)制的。關(guān)于這個(gè)問題,我曾經(jīng)在開發(fā)過程中遇到過,但是查了一下網(wǎng)上幾乎沒有相關(guān)的介紹。后來我自己做了一次試驗(yàn),分別采用ajax和傳統(tǒng)的form提交的模式來刪除一條數(shù)據(jù)……給我們的調(diào)試帶來了很大的困難。

  5、另外,像其他方面的一些問題,比如說違背了url和資源定位的初衷。例如,我給你一個(gè)url地址,如果采用了ajax技術(shù),也許你在該url地址下面看到的和我在這個(gè)url地址下看到的內(nèi)容是不同的。這個(gè)和資源定位的初衷是相背離的。

  6、一些手持設(shè)備(如手機(jī)、PDA等)現(xiàn)在還不能很好的支持ajax,比如說我們?cè)谑謾C(jī)的瀏覽器上打開采用ajax技術(shù)的網(wǎng)站時(shí),它目前是不支持的,當(dāng)然,這個(gè)問題和我們沒太多關(guān)系。

責(zé)編:fushihao
  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學(xué)歷考試
治多县| 玉山县| 仲巴县| 兴宁市| 图片| 铜梁县| 宜州市| 精河县| 景泰县| 元朗区| 高尔夫| 玉龙| 铜陵市| 轮台县| 钦州市| 衡水市| 成都市| 柳州市| 南投市| 灵川县| 云安县| 塘沽区| 宣威市| 油尖旺区| 正阳县| 灵山县| 迁安市| 浏阳市| 贵南县| 牟定县| 万年县| 克东县| 池州市| 称多县| 博客| 韶山市| 峨山| 黄梅县| 云霄县| 江北区| 延庆县|