Ajax
什么是Ajax
Ajax = 異步 JavaScript 和 XML。 AJAX 是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù)。 通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁實現(xiàn)異步更新.
(AJAX代表異步JavaScript和XML嚎京。它是一組用于異步顯示數(shù)據(jù)的相關(guān)技術(shù)诚隙。換句話說既穆,它在不重新加載網(wǎng)頁的情況下發(fā)送和檢索數(shù)據(jù)赎懦。)
為什么要用ajax:
Ajax應(yīng)用程序的優(yōu)勢在于:
通過異步模式,提升了用戶體驗
優(yōu)化了瀏覽器和服務(wù)器之間的傳輸循衰,減少不必要的數(shù)據(jù)往返铲敛,減少了帶寬占用
Ajax引擎在客戶端運行褐澎,承擔(dān)了一部分本來由服務(wù)器承擔(dān)的工作会钝,從而減少了大用戶量下的服務(wù)器負(fù)載。
AJAX最大的特點是什么工三。
Ajax可以實現(xiàn)動態(tài)不刷新(局部刷新)
就是能在不更新整個頁面的前提下維護(hù)數(shù)據(jù)迁酸。這使得Web應(yīng)用程序更為迅捷地回應(yīng)用戶動作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變過的信息俭正。
ajax的優(yōu)點
Ajax的給我們帶來的好處大家基本上都深有體會奸鬓,在這里我只簡單的講幾點:
無刷新更新數(shù)據(jù)。
AJAX最大優(yōu)點就是能在不刷新整個頁面的前提下與服務(wù)器通信維護(hù)數(shù)據(jù)掸读。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互串远,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息,減少用戶等待時間儿惫,帶來非常好的用戶體驗澡罚。異步與服務(wù)器通信。
AJAX使用異步方式與服務(wù)器通信肾请,不需要打斷用戶的操作留搔,具有更加迅速的響應(yīng)能力。優(yōu)化了Browser和Server之間的溝通铛铁,減少不必要的數(shù)據(jù)傳輸隔显、時間及降低網(wǎng)絡(luò)上數(shù)據(jù)流量。前端和后端負(fù)載平衡饵逐。
AJAX可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端括眠,利用客戶端閑置的能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān)倍权,節(jié)約空間和寬帶租用成本掷豺。并且減輕服務(wù)器的負(fù)擔(dān),AJAX的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請求和響應(yīng)對服務(wù)器造成的負(fù)擔(dān)萌业,提升站點性能坷襟。基于標(biāo)準(zhǔn)被廣泛支持。
AJAX基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)生年,不需要下載瀏覽器插件或者小程序婴程,但需要客戶允許JavaScript在瀏覽器上執(zhí)行。隨著Ajax的成熟抱婉,一些簡化Ajax使用方法的程序庫也相繼問世档叔。同樣,也出現(xiàn)了另一種輔助程序設(shè)計的技術(shù)蒸绩,為那些不支持JavaScript的用戶提供替代功能衙四。界面與應(yīng)用分離。
Ajax使WEB中的界面與應(yīng)用分離(也可以說是數(shù)據(jù)與呈現(xiàn)分離)患亿,有利于分工合作传蹈、減少非技術(shù)人員對頁面的修改造成的WEB應(yīng)用程序錯誤、提高效率步藕、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)惦界。
AJAX的缺點
AJAX干掉了Back和History功能,即對瀏覽器機(jī)制的破壞咙冗。**
在動態(tài)更新頁面的情況下沾歪,用戶無法回到前一個頁面狀態(tài),因為瀏覽器僅能記憶歷史記錄中的靜態(tài)頁面雾消。一個被完整讀入的頁面與一個已經(jīng)被動態(tài)修改過的頁面之間的差別非常微妙灾搏;用戶通常會希望單擊后退按鈕能夠取消他們的前一次操作,但是在Ajax應(yīng)用程序中立润,這將無法實現(xiàn)狂窑。AJAX的安全問題。**
AJAX技術(shù)給用戶帶來很好的用戶體驗的同時也對IT企業(yè)帶來了新的安全威脅范删,Ajax技術(shù)就如同對企業(yè)數(shù)據(jù)建立了一個直接通道蕾域。這使得開發(fā)者在不經(jīng)意間會暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯。Ajax的邏輯可以對客戶端的安全掃描技術(shù)隱藏起來到旦,允許黑客從遠(yuǎn)端服務(wù)器上建立新的攻擊旨巷。還有Ajax也難以避免一些已知的安全弱點,諸如跨站點腳步攻擊添忘、SQL注入攻擊和基于Credentials的安全漏洞等等采呐。對搜索引擎支持較弱。**
對搜索引擎的支持比較弱搁骑。如果使用不當(dāng)斧吐,AJAX會增大網(wǎng)絡(luò)數(shù)據(jù)的流量又固,從而降低整個系統(tǒng)的性能。破壞程序的異常處理機(jī)制煤率。**
至少從目前看來仰冠,像Ajax.dll,Ajaxpro.dll這些Ajax框架是會破壞程序的異常機(jī)制的蝶糯。關(guān)于這個問題洋只,曾在開發(fā)過程中遇到過,但是查了一下網(wǎng)上幾乎沒有相關(guān)的介紹昼捍。后來做了一次試驗识虚,分別采用Ajax和傳統(tǒng)的form提交的模式來刪除一條數(shù)據(jù)……給我們的調(diào)試帶來了很大的困難。違背URL和資源定位的初衷妒茬。**
例如担锤,我給你一個URL地址,如果采用了Ajax技術(shù)乍钻,也許你在該URL地址下面看到的和我在這個URL地址下看到的內(nèi)容是不同的肛循。這個和資源定位的初衷是相背離的。AJAX不能很好支持移動設(shè)備**团赁。
一些手持設(shè)備(如手機(jī)育拨、PDA等)現(xiàn)在還不能很好的支持Ajax,比如說我們在手機(jī)的瀏覽器上打開采用Ajax技術(shù)的網(wǎng)站時欢摄,它目前是不支持的。客戶端過肥笋粟,太多客戶端代碼造成開發(fā)上的成本怀挠。**
編寫復(fù)雜、容易出錯 害捕;冗余代碼比較多(層層包含js文件是AJAX的通病绿淋,再加上以往的很多服務(wù)端代碼現(xiàn)在放到了客戶端);破壞了Web的原有標(biāo)準(zhǔn)尝盼。
ajax幾種請求方式吞滞?他們的優(yōu)缺點?
常用的post,get,delete盾沫。不常用copy裁赠、head、link等等赴精。
區(qū)別:
(1)post比get安全 (因為post參數(shù)在請求體中佩捞。get參數(shù)在url上面)
(2)get傳輸速度比post快 根據(jù)傳參決定的。(post通過請求體傳參蕾哟,后臺通過數(shù)據(jù)流接收一忱。速度稍微慢一些莲蜘。而get通過url傳參可以直接獲取)
(3)post傳輸文件大理論沒有限制 get傳輸文件小大概7-8k ie4k左右
(4)get獲取數(shù)據(jù) post上傳數(shù)據(jù)(上傳的數(shù)據(jù)比較多 而且上傳數(shù)據(jù)都是重要數(shù)據(jù)。所以不論在安全性還是數(shù)據(jù)量級 post是最好的選擇)
AJAX有哪些安全問題帘营?
- AJAX源代碼是可讀的
- 攻擊者可以將腳本插入系統(tǒng)
ajax兼容寫法
function createXHR(){
if(typeof XMLHttpRequest != "undefined"){
return new XMLHttpRequest();
}else if(typeof ActiveXObject != "undefined"){
var version = [
"MSXML2.XMLHttp.6.0",
"MSXML2.XMLHttp.2.0",
"MSXML2.XMLHttp"
];
for(var i = 0;i<3;i++){
/*return new ActiveXObject(version[i]);*/
//使用try{}catch{}防止在創(chuàng)建對象時出錯
try{
return new ActiveXObject(version[i]);
}catch(e){
//TODO handle the exception
}
}
}else{
//如果都不支持票渠,則拋出異常
throw new Error("您老的瀏覽器實在是不行了")
//alert("您老的瀏覽器實在是不行了");
}
}
簡述 ajax 的過程
- 創(chuàng)建XMLHttpRequest對象,也就是創(chuàng)建一個異步調(diào)用對象
- 創(chuàng)建一個新的HTTP請求,并指定該HTTP請求的方法、URL及驗證信息
- 設(shè)置響應(yīng)HTTP請求狀態(tài)變化的函數(shù)
- 發(fā)送HTTP請求
- 獲取異步調(diào)用返回的數(shù)據(jù)
- 使用JavaScript和DOM實現(xiàn)局部刷新
.get /
.getJson() /
().load()
跨域問題
同源策略限制 不同源會造成跨域芬迄。以下任意一種情況不同庄新,都是不同源。
(同源:協(xié)議 域名 端口號全部相同 只要有一個不相同就是非同源策略)
跨域解決方案有哪些
CORS:跨域資源共享
原理:服務(wù)器設(shè)置Access-Control-Allow-OriginHTTP響應(yīng)頭之后薯鼠,瀏覽器將會允許跨域請求
限制:瀏覽器需要支持HTML5择诈,可以支持POST,PUT等方法兼容ie9以上
需要后臺設(shè)置
Access-Control-Allow-Origin: * //允許所有域名訪問出皇,或者
Access-Control-Allow-Origin: http://a.com //只允許所有域名訪問