ajax
AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)焦辅。
AJAX 不是新的編程語(yǔ)言,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法柠衅。
AJAX 是與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)的藝術(shù),在不重新加載整個(gè)頁(yè)面的情況下籍琳。
ajax的使用原理
Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個(gè)中間層菲宴,使用戶操作與服務(wù)器響應(yīng)異步化。這樣把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端趋急,利于客戶端閑置的處理能力來(lái)處理喝峦,減輕服務(wù)器和帶寬的負(fù)擔(dān),從而達(dá)到節(jié)約ISP的空間及帶寬租用成本的目的呜达。
使用 Ajax 原生方式發(fā)送請(qǐng)求主要通過(guò) XMLHttpRequest(IE7+谣蠢、Firefox、Chrome查近、Safari 以及Opera) 眉踱、ActiveXObject(IE5 和 IE6)對(duì)象實(shí)現(xiàn)異步通信效果。
創(chuàng)建XMLHttpRequest對(duì)象:
向服務(wù)器發(fā)送請(qǐng)求:使用 XMLHttpRequest 對(duì)象的 open() 和 send() 方法
使用GET還是POST霜威?
與 POST 相比谈喳,GET 更簡(jiǎn)單也更快,并且在大部分情況下都能用戈泼。
然而婿禽,在以下情況中赏僧,請(qǐng)使用 POST 請(qǐng)求:
無(wú)法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫(kù))
向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒(méi)有數(shù)據(jù)量限制)
發(fā)送包含未知字符的用戶輸入時(shí),POST 比 GET 更穩(wěn)定也更可靠
onreadystatechange事件:當(dāng)請(qǐng)求被發(fā)送到服務(wù)器時(shí)谈宛,我們需要執(zhí)行一些基于響應(yīng)的任務(wù)次哈。每當(dāng) readyState 改變時(shí),就會(huì)觸發(fā) onreadystatechange 事件吆录。
ajax的核心
Ajax的核心是JavaScript對(duì)象XmlHttpRequest窑滞。該對(duì)象在Internet Explorer 5中首次引入,它是一種支持異步請(qǐng)求的技術(shù)恢筝。簡(jiǎn)而言之哀卫,XmlHttpRequest使您可以使用JavaScript向服務(wù)器提出請(qǐng)求并處理響應(yīng),而不阻塞用戶撬槽。
ajax的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
無(wú)刷新更新數(shù)據(jù):在不刷新整個(gè)頁(yè)面的情況下維持與服務(wù)器通信
異步與服務(wù)器通信:使用異步的方式與服務(wù)器通信此改,不打斷用戶的操作
前端與后端負(fù)載均衡:將一些后端的工作移到前端,減少服務(wù)器與帶寬的負(fù)擔(dān)
基于規(guī)范被廣泛支持:不需要下載瀏覽器插件或者小程序侄柔,但需要客戶允許JavaScript在瀏覽器上執(zhí)行共啃。
界面與應(yīng)用分離:Ajax使得界面與應(yīng)用分離,也就是數(shù)據(jù)與呈現(xiàn)分離
缺點(diǎn):
Ajax不支持Back與History功能暂题,即對(duì)瀏覽器機(jī)制的破壞:在動(dòng)態(tài)更新頁(yè)面的情況下移剪,用戶無(wú)法回到前一頁(yè)的頁(yè)面狀態(tài),因?yàn)闉g覽器僅能記憶歷史紀(jì)錄中的靜態(tài)頁(yè)面
安全問(wèn)題:AJAX技術(shù)給用戶帶來(lái)很好的用戶體驗(yàn)的同時(shí)也對(duì)IT企業(yè)帶來(lái)了新的安全威脅薪者,Ajax技術(shù)就如同對(duì)企業(yè)數(shù)據(jù)建立了一個(gè)直接通道纵苛。這使得開(kāi)發(fā)者在不經(jīng)意間會(huì)暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯。ajax的邏輯可以對(duì)客戶端的安全掃描技術(shù)隱藏起來(lái)言津,允許黑客從遠(yuǎn)端服務(wù)器上建立新的攻擊攻人。還有ajax也難以避免一些已知的安全弱點(diǎn),諸如跨站點(diǎn)腳步攻擊悬槽、SQL注入攻擊和基于credentials的安全漏洞等怀吻。
對(duì)搜索引擎支持較弱:如果使用不當(dāng),AJAX會(huì)增大網(wǎng)絡(luò)數(shù)據(jù)的流量初婆,從而降低整個(gè)系統(tǒng)的性能蓬坡。解決的辦法:可以先用服務(wù)器渲染。
破壞程序的異常處理機(jī)制
違背URL與資源定位的初衷
不能很好地支持移動(dòng)設(shè)備
客戶端肥大烟逊,太多客戶段代碼造成開(kāi)發(fā)上的成本
應(yīng)用場(chǎng)景
動(dòng)態(tài)加載數(shù)據(jù)渣窜,按需取得數(shù)據(jù)铺根∠芮【樹(shù)形菜單、聯(lián)動(dòng)菜單…/省市聯(lián)動(dòng)】
改善用戶體驗(yàn)位迂》醚【輸入內(nèi)容前提示详瑞、帶進(jìn)度條文件上傳…】
電子商務(wù)應(yīng)用〕甲海【購(gòu)物車(chē)坝橡、郵件訂閱…】訪問(wèn)第三方服務(wù)【茫【訪問(wèn)搜索服務(wù)计寇、rss閱讀器】
數(shù)據(jù)的布局刷新
不適用于搜索 ,基本的導(dǎo)航脂倦,替換大量的文本番宁,部分簡(jiǎn)單的表單