Ajax常見面試題---總結
更多最新技術分享:請關注公眾號:胖梅web前端
1什麼是ajax?ajax作用是什麼?
AJAX = 非同步 JavaScript 和 XML。
AJAX 是一種用於建立快速動態網頁的技術
。 透過在後臺與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新。
2、為什麼要用ajax:
Ajax應用程式的優勢在於:
1。 透過非同步模式,提升了使用者體驗
2。 優化了瀏覽器和伺服器之間的傳輸,減少不必要的資料往返,減少了頻寬佔用
3。 Ajax引擎在客戶端執行,承擔了一部分本來由伺服器承擔的工作,從而減少了大使用者量下的伺服器負載。
3。AJAX最大的特點是什麼。
Ajax可以實現動態不重新整理(區域性重新整理)
就是能在不更新整個頁面的前提下維護資料。這使得Web應用程式更為迅捷地迴應使用者動作,並避免了在網路上傳送那些沒有改變過的資訊。
4、請介紹一下XMLHttprequest物件。
Ajax的核心是JavaScript物件XmlHttpRequest。該物件在Internet Explorer 5中首次引入,它是一種支援非同步請求的技術。簡而言之,XmlHttpRequest使您可以使用JavaScript向伺服器提出請求並處理響應,而不阻塞使用者。透過XMLHttpRequest物件,Web開發人員可以在頁面載入以後進行頁面的區域性更新。
5、AJAX技術體系的組成部分有哪些。
HTML,css,dom,xml,xmlHttpRequest,javascript
6:原生js ajax請求有幾個步驟?分別是什麼
//建立 XMLHttpRequest 物件
var ajax = new XMLHttpRequest();
//規定請求的型別、URL 以及是否非同步處理請求。
ajax。open(‘GET’,url,true);
//傳送資訊至伺服器時內容編碼型別
ajax。setRequestHeader(“Content-type”, “application/x-www-form-urlencoded”);
//傳送請求
ajax。send(null);
//接受伺服器響應資料
ajax。onreadystatechange = function () {
if (obj。readyState == 4 && (obj。status == 200 || obj。status == 304)) {
}
};
7:json字串轉換集json物件、json物件轉換json字串
//字串轉物件
JSON。parse(json)
eval(‘(’ + jsonstr + ‘)’)
// 物件轉字串
JSON。stringify(json)
Eval() json。parse()區別????
第一種方式:eval();
var data=‘{“student”:[{“name”:“張三”,“age”:“11”},{“name”:“李四”,“age”:“11”},{“name”:“王五”,“age”:“11”}]}’;
eval(’(“+data+”)’);
第二種方式:JSON。parse();
var data=’{“student”:[{“name”:“張三”,“age”:“11”},{“name”:“李四”,“age”:“11”},{“name”:“王五”,“age”:“11”}]}’;
JSON。parse(data);
區別:eval方法不會去檢查給的字串時候符合json的格式~同時如果給的字串中存在js程式碼eval也會一併執行~比如:
var data=‘{“student”:[{“name”:“張三”,“age”:“11”},{“name”:“李四”,“age”:“alert(11)”},{“name”:“王五”,“age”:“11”}]}’;
此時執行eval方法後會先彈出一個提示框輸出11的字串;
這時候使用JSON。parse()就會報錯,顯示錯誤資訊為當前字串不符合json格式;即JSON。parse()方法會檢查需要轉換的字串是否符合json格式。
相比而言eval方法是很不安全,特別是當涉及到第三方時我們需要確保傳給eval的引數是我們可以控制的,不然裡面插入比如window。location~指向一個惡意的連線
總的來說,還是推薦使用JSON。parse來實現json格式字串的解析。
8。什麼是JSON?
JSON是一種輕量級的資料交換格式。
9:ajax幾種請求方式?他們的優缺點?
常用的post,get,delete put
###程式碼上的區別
1:get透過url傳遞引數
2:post設定請求頭 規定請求資料型別
###使用上的區別
1:post比get安全
(因為post引數在請求體中。get引數在url上面)
2:get傳輸速度比post快 根據傳參決定的。
(post透過請求體傳參,後臺透過資料流接收。速度稍微慢一些。而get透過url傳參可以直接獲取)
3:post傳輸檔案大理論沒有限制 get傳輸檔案小大概7-8k ie4k左右
4:get獲取資料 post上傳資料
(上傳的資料比較多 而且上傳資料都是重要資料。所以不論在安全性還是資料量級 post是最好的選擇)
10.什麼情況造成跨域?
同源策略限制 不同源會造成跨域。以下任意一種情況不同,都是不同源。
同源:協議 域名 埠號全部相同 只要有一個不相同就是非同源策略
11。跨域解決方案有哪些?
原理:動態建立一個script標籤
。利用script標籤的src屬性不受同源策略限制。因為所有的src屬性和href屬性都不受同源策略限制。可以請求第三方伺服器資料內容。
步驟:
1。 去建立一個script標籤
2。 script的src屬性設定介面地址
3。 介面引數,必須要帶一個自定義函式名 要不然後臺無法返回資料。
4。 透過定義函式名去接收後臺返回資料
//去建立一個script標籤
var script = document。createElement(“script”);
//script的src屬性設定介面地址 並帶一個callback回撥函式名稱
script。src = “http://127。0。0。1:8888/index。php?callback=jsonpCallback”;
//插入到頁面
document。head。appendChild(script);
//透過定義函式名去接收後臺返回資料function jsonpCallback(data){
//注意 jsonp返回的資料是json物件可以直接使用
//ajax 取得資料是json字串需要轉換成json物件才可以使用。
}
2。 CORS:跨域資源共享
原理:伺服器設定Access-Control-Allow-OriginHTTP響應頭之後,瀏覽器將會允許跨域請求
限制:瀏覽器需要支援HTML5,可以支援POST,PUT等方法相容ie9以上
需要後臺設定
Access-Control-Allow-Origin: * //允許所有域名訪問,或者
Access-Control-Allow-Origin: http://a。com //只允許所有域名訪問
3。反向代理
4。window+iframe
14。http常見狀態碼有哪些?
一: 2開頭狀態碼
2xx (成功)表示成功處理了請求的狀態程式碼
200 (成功) 伺服器已成功處理了請求。 通常。
二: 3開頭狀態碼
3xx (重定向) 表示要完成請求,需要進一步操作。 通常,這些狀態程式碼用來重定向。
304 (未修改) 自從上次請求後,請求的網頁未修改過。 伺服器返回此響應時,不會返回網頁內容。
三: 4開頭狀態碼
4xx(請求錯誤) 這些狀態程式碼表示請求可能出錯,妨礙了伺服器的處理
1:400 (錯誤請求) 伺服器不理解請求的語法。
2:403 (禁止) 伺服器拒絕請求。
3:404 (未找到) 伺服器找不到請求的網頁。
四: 5開頭狀態碼
5xx(伺服器錯誤)這些狀態程式碼表示伺服器在嘗試處理請求時發生內部錯誤。 這些錯誤可能是伺服器本身的錯誤,而不是請求出錯
500 (伺服器內部錯誤) 伺服器遇到錯誤,無法完成請求
15 介紹一下XMLHttpRequest物件的常用方法和屬性
open(“method”,”URL”) 建立對伺服器的呼叫,第一個引數是HTTP請求 方式可以為GET,POST或任何伺服器所支援的您想呼叫的方式。
第二個引數是請求頁面的URL。
send()方法,傳送具體請求
abort()方法,停止當前請求
readyState屬性 請求的狀態 有5個可取值0=未初始化 ,1=正在載入
2=以載入,3=互動中,4=完成
responseText 屬性 伺服器的響應,表示為一個串
reponseXML 屬性 伺服器的響應,表示為XML
status 伺服器的HTTP狀態碼,200對應ok 400對應not found
16什麼是XML
XML是擴充套件標記語言,能夠用一系列簡單的標記描述資料
17。AJAX都有哪些優點和缺點?
1、最大的一點是頁面無重新整理,使用者的體驗非常好。
2、使用非同步方式與伺服器通訊,具有更加迅速的響應能力。
3、可以把以前一些伺服器負擔的工作轉嫁到客戶端,利用客戶端閒置的能力來處理,減輕伺服器和頻寬的負擔,節約空間和寬頻租用成本。並且減輕伺服器的負擔,ajax的原則是“按需取資料”,可以最大程度的減少冗餘請求,和響應對伺服器造成的負擔。
4、基於標準化的並被廣泛支援的技術,不需要下載外掛或者小程式。
ajax的缺點
1、ajax不支援瀏覽器back按鈕。
2、安全問題 AJAX暴露了與伺服器互動的細節。
3、對搜尋引擎的支援比較弱。
4、破壞了程式的異常機制。
5、不容易除錯。