題目1:ajax 是什么令蛉?有什么作用狸膏?
AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML)
ajax是一種在無需重新加載整個(gè)網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)
ajax是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁的技術(shù)迅涮。通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換废赞。
ajax可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下叮姑,對網(wǎng)頁的某部分進(jìn)行更新唉地。
而傳統(tǒng)的網(wǎng)頁(不使用ajax)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁面。
作用:
1渣蜗、頁面無刷新屠尊,用戶的體驗(yàn)非常好旷祸。
2耕拷、使用異步方式與服務(wù)器通信,具有更加迅速的響應(yīng)能力托享。骚烧。
3、可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端闰围,利用客戶端閑置的能力來處理赃绊,減輕服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和寬帶租用成本羡榴。并且減輕服務(wù)器的負(fù)擔(dān)碧查,ajax的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請求校仑,和響應(yīng)對服務(wù)器造成的負(fù)擔(dān)忠售。
4、基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù)迄沫,不需要下載插件或者小程序稻扬。
題目2:前后端開發(fā)聯(lián)調(diào)需要注意哪些事情?后端接口完成前如何 mock 數(shù)據(jù)羊瘩?
前后端聯(lián)調(diào)是一種真實(shí)業(yè)務(wù)數(shù)據(jù)和本地mock數(shù)據(jù)之間來回切換以達(dá)到前后端分離架構(gòu)下的不同開發(fā)速度時(shí)數(shù)據(jù)交換的一種方式方法
約定事項(xiàng)(前后端達(dá)成一致):
1.接口的類型 get泰佳、post
2.接口的名稱一致
- 傳遞參數(shù)是什么
如 {index:3 , length: 5} http://hdhhj.com?index=3&length=5- 所有交互數(shù)據(jù)的是什么格式存放數(shù)據(jù) 如 json格式字符串
mock數(shù)據(jù)
當(dāng)后端接口沒有完成前尘吗,前端需要模仿后臺(tái)數(shù)據(jù)逝她,以測試處理前端的請求。
使用nodejs搭建一個(gè)web服務(wù)器睬捶,返回我們想要的數(shù)據(jù)
安裝server-mock汽绢,在當(dāng)前的文件夾下創(chuàng)建 router.js,接受處理請求數(shù)據(jù)
題目3:點(diǎn)擊按鈕侧戴,使用 ajax 獲取數(shù)據(jù)宁昭,如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
問題:當(dāng)用戶網(wǎng)速慢,數(shù)據(jù)響應(yīng)緩慢酗宋, 用戶很可能會(huì)多次重復(fù)點(diǎn)擊积仗,希望得到數(shù)據(jù)。而加載過來的數(shù)據(jù)很多蜕猫,而且重復(fù)寂曹。
重復(fù)點(diǎn)擊 請求多次ajax,而且一直請求一塊區(qū)域的內(nèi)容。
解決思路: 阻止用戶的重復(fù)點(diǎn)擊隆圆,第一次點(diǎn)擊時(shí)請求的數(shù)據(jù)該沒到之前漱挚,其他的點(diǎn)擊操作無效,被忽略
設(shè)計(jì)一個(gè)狀態(tài)鎖渺氧,實(shí)時(shí)監(jiān)看響應(yīng)數(shù)據(jù)的情況旨涝,默認(rèn)為有已經(jīng)有響應(yīng)。
當(dāng)點(diǎn)擊按鈕時(shí)侣背,判斷請求是不是響應(yīng)了白华,沒有響應(yīng),則不會(huì)做任何操作贩耐;
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)了弧腥,沒響應(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)
})