題目1: ajax 是什么?有什么作用卸亮?
AJAX全稱(chēng)為“Asynchronous JavaScript and XML”(異步JavaScript和XML)
ajax是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下,能夠更新部分網(wǎng)頁(yè)的技術(shù)
ajax可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新哺壶。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下汰聋,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
而傳統(tǒng)的網(wǎng)頁(yè)(不使用ajax)如果需要更新內(nèi)容赴背,必須重載整個(gè)網(wǎng)頁(yè)面。
(1)無(wú)刷新更新數(shù)據(jù)。
AJAX最大優(yōu)點(diǎn)就是能在不刷新整個(gè)頁(yè)面的前提下與服務(wù)器通信維護(hù)數(shù)據(jù)凰荚。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶(hù)交互燃观,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒(méi)有改變的信息,減少用戶(hù)等待時(shí)間便瑟,帶來(lái)非常好的用戶(hù)體驗(yàn)缆毁。
(2)異步與服務(wù)器通信。
AJAX使用異步方式與服務(wù)器通信到涂,不需要打斷用戶(hù)的操作脊框,具有更加迅速的響應(yīng)能力。優(yōu)化了Browser和Server之間的溝通践啄,減少不必要的數(shù)據(jù)傳輸浇雹、時(shí)間及降低網(wǎng)絡(luò)上數(shù)據(jù)流量。
(3)前端和后端負(fù)載平衡屿讽。
AJAX可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶(hù)端昭灵,利用客戶(hù)端閑置的能力來(lái)處理,減輕服務(wù)器和帶寬的負(fù)擔(dān)聂儒,節(jié)約空間和寬帶租用成本虎锚。并且減輕服務(wù)器的負(fù)擔(dān)硫痰,AJAX的原則是“按需取數(shù)據(jù)”衩婚,可以最大程度的減少冗余請(qǐng)求和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān),提升站點(diǎn)性能效斑。
(4)基于標(biāo)準(zhǔn)被廣泛支持非春。
AJAX基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載瀏覽器插件或者小程序缓屠,但需要客戶(hù)允許JavaScript在瀏覽器上執(zhí)行奇昙。隨著Ajax的成熟,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問(wèn)世敌完。同樣储耐,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶(hù)提供替代功能滨溉。
(5)界面與應(yīng)用分離什湘。
Ajax使WEB中的界面與應(yīng)用分離(也可以說(shuō)是數(shù)據(jù)與呈現(xiàn)分離),有利于分工合作晦攒、減少非技術(shù)人員對(duì)頁(yè)面的修改造成的WEB應(yīng)用程序錯(cuò)誤闽撤、提高效率、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)脯颜。
題目2: 前后端開(kāi)發(fā)聯(lián)調(diào)需要注意哪些事情哟旗?后端接口完成前如何 mock 數(shù)據(jù)?
前后端聯(lián)調(diào)是一種 真實(shí)業(yè)務(wù)數(shù)據(jù)和 本地mock數(shù)據(jù)之間來(lái)回切換以達(dá)到前后端分離架構(gòu)下的不同開(kāi)發(fā)速度時(shí)數(shù)據(jù)交換的一種方式方法。
注意事項(xiàng):
- 約定前后端聯(lián)調(diào)的時(shí)間闸餐。
- 約定雙方需要傳輸?shù)臄?shù)據(jù)和接口饱亮,在接口文檔中確定好參數(shù)的名稱(chēng)、格式等舍沙。
- 約定請(qǐng)求和響應(yīng)的格式和內(nèi)容近尚。
什么是mock數(shù)據(jù):參照接口相關(guān)文檔,使用假數(shù)據(jù)來(lái)驗(yàn)證我們制作的頁(yè)面響應(yīng)和接口是否正常场勤。
使用server-mock或mock.js (http://mockjs.com/ )搭建模擬服務(wù)器戈锻,進(jìn)行模擬測(cè)試(優(yōu)點(diǎn)是不需要熟練掌握后臺(tái)PHP語(yǔ)言,采用熟悉的js語(yǔ)法)和媳;
題目3:點(diǎn)擊按鈕格遭,使用 ajax 獲取數(shù)據(jù),如何在數(shù)據(jù)到來(lái)之前防止重復(fù)點(diǎn)擊?
var isDataArrive=true;//狀態(tài)鎖 默認(rèn)現(xiàn)在是有響應(yīng)數(shù)據(jù)
var btn=document.querySelector('#btn') var pageIndex=3;
btn.addEventListener('click', function(e){
e.preventDefault()
if(!isDataArrive){ //判斷是不是響應(yīng)了留瞳,沒(méi)響應(yīng)拒迅,退出 return; }
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){ if( xhr.status === 200 || xhr.status == 304){
var results = JSON.parse(xhr.responseText) console.log(results)
var fragment = document.createDocumentFragment()
for(var i = 0; i < results.length; i++){
var node = document.createElement('li')
node.innerText = results[i] fragment.appendChild(node)
}
content.appendChild(fragment)
pageIndex = pageIndex + 5
}else{ console.log('出錯(cuò)了') }
isDataArrive = true //當(dāng)前表示是響應(yīng)數(shù)據(jù)狀態(tài)
}
}
xhr.open('get', '/loadMore?index='+pageIndex+'&length=5', true)
xhr.send()
isDataArrive = false //做完數(shù)據(jù)處理,響應(yīng)數(shù)據(jù)后她倘,恢復(fù)到?jīng)]有響應(yīng)數(shù)據(jù)狀態(tài) })
題目4:實(shí)現(xiàn)加載更多的功能璧微,效果,后端在本地使用server-mock來(lái)模擬數(shù)據(jù)
代碼