前端面試題整理—ajax篇


1、什么是Ajax和JSON,它們的優缺點

  Ajax是全稱是asynchronous JavaScript andXML,即異步JavaScript和xml,用於在Web頁面中實現異步數據交互,實現頁面局部刷新

  優點:可以實現異步通信效果,頁面局部刷新,帶來更好的用戶體驗

  JSON是一種輕量級的數據交換格式,看着像對象,本質是字符串

  優點:輕量級、易於人的閱讀和編寫,便於js解析,支持復合數據類型

 

2、ajax的交互流程有哪幾步?

  1)創建ajax對象

    xhr = new XMLHttpRequest

  2)規定請求地址

    xhr.open(method,url,async)

  3)等待服務器相應

    xhr.onload

  4)向服務器發送請求

    xhr.send()

 

3、AJAX應用和傳統Web應用有什么不同

  在傳統的Js中,如果想發送客戶端信息到服務器,需要建立一個HTML 表單然后GET或者POST數據到服務器端

  用戶需要點擊提交按鈕來發送數據信息,然后等待服務器響應請求,頁面重新加載

  使用AJAX技術,就可以使Javascript通過XMLHttpRequest對象直接與服務器進行交互

 

4、XMLHttpRequest對象在IE和Firefox中創建方式有沒有不同?

  IE中通過new ActiveXObject()得到,Firefox中通過newXMLHttpRequest()得到

  使用jquery封裝好的ajax,會避免這些問題

 

5、ajax如何解決瀏覽器緩存問題

  1)在ajax發送請求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")

  2)在ajax發送請求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache")

  3)在URL后面加上一個隨機數: "fresh=" + Math.random();

  4)在URL后面加上時間戳:"nowtime=" + new Date().getTime()

  5)在jq ajax下,使用 $.ajaxSetup({cache:false}) 這樣就不會保存緩存記錄

 

6、簡述ajax的優缺點

  優點:

  1)無刷新更新數據(在不刷新整個頁面的情況下維持與服務器通信)

  2)異步與服務器通信(使用異步的方式與服務器通信,不打斷用戶的操作)

  3)前端和后端負載均衡(將一些后端的工作交給前端,減少服務器與寬度的負擔)

  4)界面和應用相分離(ajax將界面和應用分離也就是數據與呈現相分離)

  缺點:

  1)ajax不支持瀏覽器back按鈕

  2)安全問題 Aajax暴露了與服務器交互的細節

  3)對搜索引擎的支持比較弱

  4)破壞了Back與History后退按鈕的正常行為等瀏覽器機制

 

7、闡述一下異步加載JS

  1)異步加載的方案: 動態插入 script 標簽

  2)通過 ajax 去獲取 js 代碼,然后通過 eval 執行

  3)script 標簽上添加 defer 或者 async 屬性

  4)創建並插入 iframe,讓它異步執行 js

 

8、json字符串與對象如何相互轉換

  把JSON格式轉成對象:JSON.parse()

  把對象轉成標准json:JSON.stringify()

  使用eval能夠把字符串盡量轉成js運行的代碼 eval('(' + jsonstr + ')') 

  eval是不安全的(可能會注入不必要的東西),通過new Function('','return'+json)();可以解決該問題

 

9、get與post的區別,什么時候使用post?

  get和post在HTTP中都代表着請求數據,其中get請求相對來說更簡單、快速,效率高些

  get相對post安全性低

  get有緩存,post沒有

  get體積小,post可以無限大

  get的url參數可見,post不可見

  get只接受ASCII字符的參數數據類型,post沒有限制

  get請求參數會保留歷史記錄,post中參數不會保留

  get會被瀏覽器主動catch,post不會,需要手動設置

  get在瀏覽器回退時無害,post會再次提交請求

 

  post一般用於修改服務器上的資源,對所發送的信息沒有限制。比如

  1. 無法使用緩存文件(更新服務器上的文件或數據庫)
  2. 向服務器發送大量數據(POST 沒有數據量限制)
  3. 發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

 

10、介紹一下XMLHttpRequest對象,他有哪些常用方法和屬性

  XMLHttpRequest是ajax的核心,通過XMLHttpRequest對象,Web開發人員可以在頁面加載以后進行頁面的局部更新

  常用的方法:

  open(get/post,url,是否異步)創建http請求

  send()發送請求給服務器

  setRequestHeader()設置頭信息(使用post才會用到,get並不需要調用該方法)

  常用的屬性:

  onreadystatechange 用於監聽ajax的工作狀態(readyState變化時會調用此方法)

  readyState 用來存放XMLHttpRequest的狀態

  status 服務器返回的狀態碼

  responseText 服務器返回的文本內容

 

11、說下readyState屬性是干嘛的,都有哪幾個狀態

  readyState屬性用來存放XMLHttpRequest的狀態,監聽從0-4發生不同的變化

  0:請求未初始化(此時還沒有調用open)

  1:服務器連接已建立,已經發送請求開始監聽

  2:請求已接收,已經收到服務器返回的內容

  3:請求處理中,解析服務器響應內容

  4:請求已完成,且響應就緒

 

12、jquery ajax怎么實現,你認為他有什么不足之處

  

$.ajax({
     url:發送請求的地址,
     data:數據的拼接,//發送到服務器的數據
     type:'get',//請求方式,默認get請求
     dataType:'json',//服務器返回的數據類型
     async:true,//是否異步,默認true
     cache:false,//設置為 false 將不會從瀏覽器緩存中加載請求信息
     success:function(){},//請求成功后的回調函數
     error: function(){}//請求失敗時調用此函數
})

  不足之處:

  (1)針對MVC的編程,不符合現在前端MVVM的浪潮

  (2)基於原生的XHR開發,XHR本身的架構不清晰,已經有了fetch的替代方案

 

13、說一下同步和異步的區別

  同步會阻塞,異步不會阻塞

  同步:程序運行從上而下,瀏覽器必須把這個任務執行完畢,才能繼續執行下一個任務

  異步:程序運行從上而下,瀏覽器任務沒有執行完,但是可以繼續執行下一行代碼

 

14、解釋一下 JavaScript的同源策略

  同源策略是客戶端腳本的安全度量標准,為了防止某個文檔或腳本從多個不同源裝載

  同源策略是一種安全協議,指一段腳本只能讀取來自同一來源的窗口和文檔的屬性

  所謂同源就是同域名、同協議、同端口,只有同源的地址才能相互通過ajax方式請求

 

15、如何解決跨域問題?

  跨域的概念:協議、域名、端口都相同才同域,否則都是跨域

  解決跨域問題:

  1)使用JSONP(json+padding)把數據內填充起來

  2)CORS方式(跨域資源共享),在后端上配置可跨域

  3)服務器代理,通過服務器的文件能訪問第三方資源

 

16、解釋jsonp的原理

  ajax請求受同源策略影響,不允許進行跨域請求,而script標簽src屬性中的鏈接卻可以訪問跨域的js腳本,利用這個特性,服務端不再返回JSON格式的數據,

  而是返回一段調用某個函數的js代碼,在src中進行了調用,這樣實現了跨域。

 

17、請問jsonp是不是ajax中實現跨域訪問的技術

  jsonp不是AJAX中實現跨域訪問的技術

  jsonp沒有使用XMLHttpRequest對象

  jsonp只是一種跨域的協議

  jsonp只支持Get方式

 

18、頁面編碼和被請求的資源編碼如果不一致如何處理?

  對於ajax請求傳遞的參數,如果是get請求,參數傳遞中文,在有些瀏覽器會亂碼

  不同的瀏覽器對參數編碼的處理方式不同,所以對於get請求的參數需要使用 encodeURIComponent函數對參數進行編碼處理

  於post請求不需要進行編碼

 

19、AJAX請求總共有多少種CALLBACK

  總共有八種Callback

  onSuccess、onFailure、onUninitialized、onLoading

  onLoaded、onInteractive、onComplete、onException

 

20、拿到數據怎么區分是ajax還是jsonp

  ajax: {}

  jsonp:fn({})

  ajax的數據jsonp不能用,jsonp的數據ajax是可以用的

  jsonp本質是通過URL的方式進行請求的,所以它是get方式請求,沒有post


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM