題目1: ajax 是什么?有什么作用?
AJAX(Asynchronous JavaScript + XML),異步的JavaScript和XML,它是利用現(xiàn)有的HTML或XHTML,層疊樣式表,JavaScript,文檔對象模型,XML、XSLT,最重要的是XMLHttpRequest對象等這些技術(shù)結(jié)合在Ajax模型中,從而使得web應(yīng)用程序能夠快速地對用戶界面進(jìn)行增量更新,而無需重新加載整個瀏覽器頁面。這使得應(yīng)用程序更快、更靈敏地響應(yīng)用戶操作。
題目2: 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情?后端接口完成前如何 mock 數(shù)據(jù)?
** 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情: **
約定數(shù)據(jù): 后端數(shù)據(jù)寫好,放在模板里,前端可以寫頁面,互不影響
約定接口: 請求和響應(yīng)的格式;接口名稱,請求參數(shù),響應(yīng)
**后端接口完成前如何mock數(shù)據(jù) **
mock數(shù)據(jù)指的是在后端開發(fā)沒有完成時,前端可以通過mock方法搭建本地服務(wù)器,模擬后臺數(shù)據(jù)來實(shí)現(xiàn)數(shù)據(jù)交互的效果。
可以安裝server-mock,這樣不需要特地去寫一個后臺的處理頁面文件來訪問數(shù)據(jù)。
題目3:點(diǎn)擊按鈕,使用 ajax 獲取數(shù)據(jù),如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
設(shè)置一個變量(狀態(tài)鎖)isDataArrive=true,監(jiān)聽按鈕點(diǎn)擊事件,如果數(shù)據(jù)還沒發(fā)送過來
if(!isDataArrive) return,那么這次點(diǎn)擊什么也不做。請求數(shù)據(jù)完成后,打開鎖,最后在發(fā)送請求之前,再做個標(biāo)記加上狀態(tài)鎖,設(shè)置為flase。
var isDataArrive = true;//聲明狀態(tài)鎖,默認(rèn)打開
btn.addEventListener("click",function(){
if (!isDataArrive) return
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readystate === 4) {
if (xhr.readystate === 200||xhr.readystate ===304) {
//dosomething
}
isDataArrive = true;
}
}
xhr.open('get','/index?length',true)
xhr.send()
isDataArrive = false;//上鎖,禁止在請求完成前發(fā)請求
})
</script>