Ajax
什么是Ajax
Ajax = 異步 JavaScript 和 XML。 AJAX 是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù)。 通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁實現(xiàn)異步更新.
(AJAX代表異步JavaScript和XML。它是一組用于異步顯示數(shù)據(jù)的相關(guān)技術(shù)。換句話說,它在不重新加載網(wǎng)頁的情況下發(fā)送和檢索數(shù)據(jù)。)
為什么要用ajax:
Ajax應用程序的優(yōu)勢在于:
通過異步模式,提升了用戶體驗
優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用
Ajax引擎在客戶端運行,承擔了一部分本來由服務(wù)器承擔的工作,從而減少了大用戶量下的服務(wù)器負載。
AJAX最大的特點是什么。
Ajax可以實現(xiàn)動態(tài)不刷新(局部刷新)
就是能在不更新整個頁面的前提下維護數(shù)據(jù)。這使得Web應用程序更為迅捷地回應用戶動作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變過的信息。
ajax的優(yōu)點
Ajax的給我們帶來的好處大家基本上都深有體會,在這里我只簡單的講幾點:
無刷新更新數(shù)據(jù)。
AJAX最大優(yōu)點就是能在不刷新整個頁面的前提下與服務(wù)器通信維護數(shù)據(jù)。這使得Web應用程序更為迅捷地響應用戶交互,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒有改變的信息,減少用戶等待時間,帶來非常好的用戶體驗。異步與服務(wù)器通信。
AJAX使用異步方式與服務(wù)器通信,不需要打斷用戶的操作,具有更加迅速的響應能力。優(yōu)化了Browser和Server之間的溝通,減少不必要的數(shù)據(jù)傳輸、時間及降低網(wǎng)絡(luò)上數(shù)據(jù)流量。前端和后端負載平衡。
AJAX可以把以前一些服務(wù)器負擔的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理,減輕服務(wù)器和帶寬的負擔,節(jié)約空間和寬帶租用成本。并且減輕服務(wù)器的負擔,AJAX的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請求和響應對服務(wù)器造成的負擔,提升站點性能。基于標準被廣泛支持。
AJAX基于標準化的并被廣泛支持的技術(shù),不需要下載瀏覽器插件或者小程序,但需要客戶允許JavaScript在瀏覽器上執(zhí)行。隨著Ajax的成熟,一些簡化Ajax使用方法的程序庫也相繼問世。同樣,也出現(xiàn)了另一種輔助程序設(shè)計的技術(shù),為那些不支持JavaScript的用戶提供替代功能。界面與應用分離。
Ajax使WEB中的界面與應用分離(也可以說是數(shù)據(jù)與呈現(xiàn)分離),有利于分工合作、減少非技術(shù)人員對頁面的修改造成的WEB應用程序錯誤、提高效率、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)。
AJAX的缺點
AJAX干掉了Back和History功能,即對瀏覽器機制的破壞。**
在動態(tài)更新頁面的情況下,用戶無法回到前一個頁面狀態(tài),因為瀏覽器僅能記憶歷史記錄中的靜態(tài)頁面。一個被完整讀入的頁面與一個已經(jīng)被動態(tài)修改過的頁面之間的差別非常微妙;用戶通常會希望單擊后退按鈕能夠取消他們的前一次操作,但是在Ajax應用程序中,這將無法實現(xiàn)。AJAX的安全問題。**
AJAX技術(shù)給用戶帶來很好的用戶體驗的同時也對IT企業(yè)帶來了新的安全威脅,Ajax技術(shù)就如同對企業(yè)數(shù)據(jù)建立了一個直接通道。這使得開發(fā)者在不經(jīng)意間會暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯。Ajax的邏輯可以對客戶端的安全掃描技術(shù)隱藏起來,允許黑客從遠端服務(wù)器上建立新的攻擊。還有Ajax也難以避免一些已知的安全弱點,諸如跨站點腳步攻擊、SQL注入攻擊和基于Credentials的安全漏洞等等。對搜索引擎支持較弱。**
對搜索引擎的支持比較弱。如果使用不當,AJAX會增大網(wǎng)絡(luò)數(shù)據(jù)的流量,從而降低整個系統(tǒng)的性能。破壞程序的異常處理機制。**
至少從目前看來,像Ajax.dll,Ajaxpro.dll這些Ajax框架是會破壞程序的異常機制的。關(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è)備(如手機、PDA等)現(xiàn)在還不能很好的支持Ajax,比如說我們在手機的瀏覽器上打開采用Ajax技術(shù)的網(wǎng)站時,它目前是不支持的。客戶端過肥,太多客戶端代碼造成開發(fā)上的成本。**
編寫復雜、容易出錯 ;冗余代碼比較多(層層包含js文件是AJAX的通病,再加上以往的很多服務(wù)端代碼現(xiàn)在放到了客戶端);破壞了Web的原有標準。
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è)置響應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響應頭之后,瀏覽器將會允許跨域請求
限制:瀏覽器需要支持HTML5,可以支持POST,PUT等方法兼容ie9以上
需要后臺設(shè)置
Access-Control-Allow-Origin: * //允許所有域名訪問,或者
Access-Control-Allow-Origin: http://a.com //只允許所有域名訪問