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