Ajax系列面試題總結01
1、Ajax是什麼?如何建立一個Ajax?
Ajax並不算是一種新的技術,全稱是asychronous javascript and xml,可以說是已有技術的組合,主要用來實現客戶端與伺服器端的非同步通訊效果,實現頁面的區域性重新整理,早期的瀏覽器並不能原生支援ajax,可以使用隱藏幀(iframe)方式變相實現非同步效果,後來的瀏覽器提供了對ajax的原生支援
使用ajax原生方式傳送請求主要通過XMLHttpRequest(標準瀏覽器)、ActiveXObject(IE瀏覽器)物件實現非同步通訊效果
基本步驟:
var xhr =null;//建立物件
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open(“方式”,”地址”,”標誌位”);//初始化請求
xhr.setRequestHeader(“”,””);//設定http頭資訊
xhr.onreadystatechange =function(){}//指定回撥函式
xhr.send();//傳送請求
js框架(jQuery/EXTJS等)提供的ajax API對原生的ajax進行了封裝,熟悉了基礎理論,再學習別的框架就會得心應手,好多都是換湯不換藥的內容
2、同步和非同步的區別?
同步:阻塞的
-張三叫李四去吃飯,李四一直忙得不停,張三一直等著,直到李四忙完兩個人一塊去吃飯
=瀏覽器向伺服器請求資料,伺服器比較忙,瀏覽器一直等著(頁面白屏),直到伺服器返回資料,瀏覽器才能顯示頁面
非同步:非阻塞的
-張三叫李四去吃飯,李四在忙,張三說了一聲然後自己就去吃飯了,李四忙完後自己去吃
=瀏覽器向伺服器請求資料,伺服器比較忙,瀏覽器可以自如的幹原來的事情(顯示頁面),伺服器返回資料的時候通知瀏覽器一聲,瀏覽器把返回的資料再渲染到頁面,區域性更新
3、如何解決跨域問題?
理解跨域的概念:協議、域名、埠都相同才同域,否則都是跨域
出於安全考慮,伺服器不允許ajax跨域獲取資料,但是可以跨域獲取檔案內容,所以基於這一點,可以動態建立script標籤,使用標籤的src屬性訪問js檔案的形式獲取js指令碼,並且這個js指令碼中的內容是函式呼叫
4、頁面編碼和被請求的資源編碼如果不一致如何處理?
對於ajax請求傳遞的引數,如果是get請求方式,引數如果傳遞中文,在有些瀏覽器會亂碼,不同的瀏覽器對引數編碼的處理方式不同,所以對於get請求的引數需要使用encodeURIComponent函式對引數進行編碼處理,後臺開發語言都有相應的解碼api。對於post請求不需要進行編碼
5、簡述ajax的過程。
1. 建立XMLHttpRequest物件,也就是建立一個非同步呼叫物件
2. 建立一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證資訊
3. 設定響應HTTP請求狀態變化的函式
4. 傳送HTTP請求
5. 獲取非同步呼叫返回的資料
6. 使用JavaScript和DOM實現區域性重新整理
6、闡述一下非同步載入JS。
1. 非同步載入的方案: 動態插入 script 標籤
2. 通過 ajax 去獲取 js 程式碼,然後通過 eval 執行
3. script 標籤上新增 defer 或者 async 屬性
4. 建立並插入 iframe,讓它非同步執行 js
7、請解釋一下 JavaScript的同源策略。‘’
同源策略是客戶端指令碼(尤其是Javascript)的重要的安全度量標準。它最早出自Netscape Navigator2.0,其目的是防止某個文件或指令碼從多個不同源裝載。所謂同源指的是:協議,域名,埠相同,同源策略是一種安全協議,指一段指令碼只能讀取來自同一來源的視窗和文件的屬性。
8、GET和POST的區別,何時使用POST?
GET:一般用於資訊獲取,使用URL傳遞引數,對所傳送資訊的數量也有限制,一般在2000個字元,有的瀏覽器是8000個字元
POST:一般用於修改伺服器上的資源,對所傳送的資訊沒有限制
在以下情況中,請使用 POST 請求:
1. 無法使用快取檔案(更新伺服器上的檔案或資料庫)
2. 向伺服器傳送大量資料(POST 沒有資料量限制)
3. 傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠
9、ajax是什麼?ajax的互動模型?同步和非同步的區別?如何解決跨域問題?
1. 通過非同步模式,提升了使用者體驗
2. 優化了瀏覽器和伺服器之間的傳輸,減少不必要的資料往返,減少了頻寬佔用
3. Ajax在客戶端執行,承擔了一部分本來由伺服器承擔的工作,減少了大使用者量下的伺服器負載。
10、 Ajax的最大的特點是什麼。
Ajax可以實現非同步通訊效果,實現頁面區域性重新整理,帶來更好的使用者體驗;按需獲取資料,節約頻寬資源;
11、ajax的缺點
1、ajax不支援瀏覽器back按鈕。
2、安全問題 AJAX暴露了與伺服器互動的細節。
3、對搜尋引擎的支援比較弱。
4、破壞了程式的異常機制。
12、ajax請求的時候get和post方式的區別
get一般用來進行查詢操作,url地址有長度限制,請求的引數都暴露在url地址當中,如果傳遞中文引數,需要自己進行編碼操作,安全性較低。
post請求方式主要用來提交資料,沒有資料長度的限制,提交的資料內容存在於http請求體中,資料不會暴漏在url地址中。
13、解釋jsonp的原理,以及為什麼不是真正的ajax
Jsonp並不是一種資料格式9,而json是一種資料格式,jsonp是用來解決跨域獲取資料的一種解決方案,具體是通過動態建立script標籤,然後通過標籤的src屬性獲取js檔案中的js指令碼,該指令碼的內容是一個函式呼叫,引數就是伺服器返回的資料,為了處理這些返回的資料,需要事先在頁面定義好回撥函式,本質上使用的並不是ajax技術
14、什麼是Ajax和JSON,它們的優缺點。
Ajax是全稱是asynchronous JavaScript andXML,即非同步JavaScript和xml,用於在Web頁面中實現非同步資料互動,實現頁面區域性重新整理。
優點:可以使得頁面不過載全部內容的情況下載入區域性內容,降低資料傳輸量,避免使用者不斷重新整理或者跳轉頁面,提高使用者體驗
缺點:對搜尋引擎不友好;要實現ajax下的前後退功能成本較大;可能造成請求數的增加跨域問題限制;
JSON是一種輕量級的資料交換格式,ECMA的一個子集
優點:輕量級、易於人的閱讀和編寫,便於機器(JavaScript)解析,支援複合資料型別(陣列、物件、字串、數字)
15、http常見的狀態碼有那些?分別代表是什麼意思?
200 - 請求成功
301 - 資源(網頁等)被永久轉移到其它URL
404 - 請求的資源(網頁等)不存在
500 - 內部伺服器錯誤
16、一個頁面從輸入 URL到頁面載入顯示完成,這個過程中都發生了什麼?
分為4個步驟:
1. 當傳送一個 URL 請求時,不管這個 URL 是 Web 頁面的 URL 還是 Web 頁面上每個資源的 URL,瀏覽器都會開啟一個執行緒來處理這個請求,同時在遠端 DNS 伺服器上啟動一個 DNS 查詢。這能使瀏覽器獲得請求對應的 IP 地址。
2. 瀏覽器與遠端 Web 伺服器通過 TCP 三次握手協商來建立一個 TCP/IP 連線。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這三個報文在 瀏覽器和伺服器之間傳遞。該握手首先由客戶端嘗試建立起通訊,而後伺服器應答並接受客戶端的請求,最後由客戶端發出該請求已經被接受的報文。
3. 一旦 TCP/IP 連線建立,瀏覽器會通過該連線向遠端伺服器傳送 HTTP 的 GET 請求。遠端伺服器找到資源並使用 HTTP 響應返回該資源,值為 200 的 HTTP 響應狀態表示一個正確的響應。
4. 此時,Web 伺服器提供資源服務,客戶端開始下載資源。
17、ajax請求的時候get和post方式的區別
get一般用來進行查詢操作,url地址有長度限制,請求的引數都暴露在url地址當中,如果傳遞中文引數,需要自己進行編碼操作,安全性較低。
post請求方式主要用來提交資料,沒有資料長度的限制,提交的資料內容存在於http請求體中,資料不會暴漏在url地址中。
18、ajax請求時,如何解釋json資料
使用eval() 或者JSON.parse() 鑑於安全性考慮,推薦使用JSON.parse()更靠譜,對資料的安全性更好。