1. 程式人生 > >Ajax系列面試題總結01

Ajax系列面試題總結01

1Ajax是什麼?如何建立一個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,其目的是防止某個文件或指令碼從多個不同源裝載。所謂同源指的是:協議,域名,埠相同,同源策略是一種安全協議,指一段指令碼只能讀取來自同一來源的視窗和文件的屬性。

8GETPOST的區別,何時使用POST

GET:一般用於資訊獲取,使用URL傳遞引數,對所傳送資訊的數量也有限制,一般在2000個字元,有的瀏覽器是8000個字元

POST:一般用於修改伺服器上的資源,對所傳送的資訊沒有限制

在以下情況中,請使用 POST 請求:

1. 無法使用快取檔案(更新伺服器上的檔案或資料庫)

2. 向伺服器傳送大量資料(POST 沒有資料量限制)

3. 傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠

9ajax是什麼?ajax的互動模型?同步和非同步的區別?如何解決跨域問題?

 1. 通過非同步模式,提升了使用者體驗

 2. 優化了瀏覽器和伺服器之間的傳輸,減少不必要的資料往返,減少了頻寬佔用

3.  Ajax在客戶端執行,承擔了一部分本來由伺服器承擔的工作,減少了大使用者量下的伺服器負載。

10 Ajax的最大的特點是什麼。

    Ajax可以實現非同步通訊效果,實現頁面區域性重新整理,帶來更好的使用者體驗;按需獲取資料,節約頻寬資源;

11ajax的缺點

 1、ajax不支援瀏覽器back按鈕。

 2、安全問題 AJAX暴露了與伺服器互動的細節。

 3、對搜尋引擎的支援比較弱。

 4、破壞了程式的異常機制。

12ajax請求的時候getpost方式的區別

get一般用來進行查詢操作,url地址有長度限制,請求的引數都暴露在url地址當中,如果傳遞中文引數,需要自己進行編碼操作,安全性較低。

post請求方式主要用來提交資料,沒有資料長度的限制,提交的資料內容存在於http請求體中,資料不會暴漏在url地址中。

13、解釋jsonp的原理,以及為什麼不是真正的ajax

Jsonp並不是一種資料格式9,而json是一種資料格式,jsonp是用來解決跨域獲取資料的一種解決方案,具體是通過動態建立script標籤,然後通過標籤的src屬性獲取js檔案中的js指令碼,該指令碼的內容是一個函式呼叫,引數就是伺服器返回的資料,為了處理這些返回的資料,需要事先在頁面定義好回撥函式,本質上使用的並不是ajax技術

14、什麼是AjaxJSON,它們的優缺點。

Ajax是全稱是asynchronous JavaScript andXML,即非同步JavaScript和xml,用於在Web頁面中實現非同步資料互動,實現頁面區域性重新整理。

優點:可以使得頁面不過載全部內容的情況下載入區域性內容,降低資料傳輸量,避免使用者不斷重新整理或者跳轉頁面,提高使用者體驗

缺點:對搜尋引擎不友好;要實現ajax下的前後退功能成本較大;可能造成請求數的增加跨域問題限制;

JSON是一種輕量級的資料交換格式,ECMA的一個子集

優點:輕量級、易於人的閱讀和編寫,便於機器(JavaScript)解析,支援複合資料型別(陣列、物件、字串、數字)

15http常見的狀態碼有那些?分別代表是什麼意思?

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 伺服器提供資源服務,客戶端開始下載資源。

17ajax請求的時候getpost方式的區別

get一般用來進行查詢操作,url地址有長度限制,請求的引數都暴露在url地址當中,如果傳遞中文引數,需要自己進行編碼操作,安全性較低。

post請求方式主要用來提交資料,沒有資料長度的限制,提交的資料內容存在於http請求體中,資料不會暴漏在url地址中。

18ajax請求時,如何解釋json資料

使用eval() 或者JSON.parse() 鑑於安全性考慮,推薦使用JSON.parse()更靠譜對資料的安全性更好