題目1: ajax 是什么帝火?有什么作用?
AJAX不是JavaScript的規(guī)范嘲更,它只是一個(gè)哥們“發(fā)明”的縮寫:Asynchronous JavaScript and XML,意思就是用JavaScript執(zhí)行異步網(wǎng)絡(luò)請(qǐng)求。
如果仔細(xì)觀察一個(gè)Form的提交纤勒,你就會(huì)發(fā)現(xiàn),一旦用戶點(diǎn)擊“Submit”按鈕隆檀,表單開始提交摇天,瀏覽器就會(huì)刷新頁面,然后在新頁面里告訴你操作是成功了還是失敗了恐仑。如果不幸由于網(wǎng)絡(luò)太慢或者其他原因泉坐,就會(huì)得到一個(gè)404頁面。
這就是Web的運(yùn)作原理:一次HTTP請(qǐng)求對(duì)應(yīng)一個(gè)頁面裳仆。
如果要讓用戶留在當(dāng)前頁面中腕让,同時(shí)發(fā)出新的HTTP請(qǐng)求,就必須用JavaScript發(fā)送這個(gè)新請(qǐng)求鉴逞,接收到數(shù)據(jù)后记某,再用JavaScript更新頁面,這樣一來构捡,用戶就感覺自己仍然停留在當(dāng)前頁面液南,但是數(shù)據(jù)卻可以不斷地更新。
最早大規(guī)模使用AJAX的就是Gmail勾徽,Gmail的頁面在首次加載后滑凉,剩下的所有數(shù)據(jù)都依賴于AJAX來更新。
用JavaScript寫一個(gè)完整的AJAX代碼并不復(fù)雜喘帚,但是需要注意:AJAX請(qǐng)求是異步執(zhí)行的畅姊,也就是說,要通過回調(diào)函數(shù)獲得響應(yīng)吹由。
題目2: 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情若未?后端接口完成前如何 mock 數(shù)據(jù)?
前后端聯(lián)調(diào)需要:
約定接口類型(get/post)和名稱
約定前端發(fā)送數(shù)據(jù)的類型及格式
約定后端響應(yīng)返回的數(shù)據(jù)類型及格式
mock數(shù)據(jù):使用server mock搭建本地服務(wù)器倾鲫,用router.js文件模擬網(wǎng)站后端
題目3:點(diǎn)擊按鈕粗合,使用 ajax 獲取數(shù)據(jù)萍嬉,如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
在按鈕點(diǎn)擊下至獲取到數(shù)據(jù)之前這段時(shí)間,屏蔽掉按鍵所綁定的時(shí)間隙疚,使之在這一段時(shí)間之內(nèi)的點(diǎn)擊是無效的即可壤追,以下是代碼:
var dataArrive = true;
btn.addEventListener('click', function () {
if(!dataArrive)
return;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if(xhr.readyState === 4){
if(xhr.status === 200 || xhr.status === 304){
//...
}
else
console.log('出錯(cuò)了,請(qǐng)稍后再試');
isArrive = true;
}
};
xhr.open('get', '/load', true);
xhr.send();
isArrive = false;
});