ajax 是什么?有什么作用?
AJAX即Asynchronous Javascript And XML(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。
AJAX = 異步 JavaScript和XML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)。
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)頁的情況下,對(duì)網(wǎng)頁的某部分進(jìn)行更新。
傳統(tǒng)的網(wǎng)頁(不使用 AJAX)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁頁面。
前后端開發(fā)聯(lián)調(diào)需要注意哪些事情?后端接口完成前如何 mock 數(shù)據(jù)?
前后端開發(fā)聯(lián)調(diào)需要注意以下事情:
約定數(shù)據(jù):約定好頁面需要的數(shù)據(jù)和數(shù)據(jù)類型
約定接口:約定接口的名稱、請(qǐng)求的參數(shù)、相應(yīng)的格式(成功或失敗分別返回什么)
將約定好的內(nèi)容整理成接口文檔和規(guī)范
后端接口完成前如何 mock 數(shù)據(jù)?
1.可以使用server-mock或mock.js搭建模擬服務(wù)器,進(jìn)行模擬測(cè)試
2.mock.js的github倉庫
3.server-mock的github倉庫
4.使用XAMPP等工具,編寫PHP文件來進(jìn)行測(cè)試
點(diǎn)擊按鈕,使用 ajax 獲取數(shù)據(jù),如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
用添加狀態(tài)鎖的方法,在第一次請(qǐng)求的數(shù)據(jù)未到來之前,用戶的點(diǎn)擊失效,不會(huì)請(qǐng)求數(shù)據(jù)。
var isDataOk = true;
addEventLintener('click',function(){
if(!isDataOk){
return;
} //若數(shù)據(jù)未到來則退出函數(shù)
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if((xhr.status === 200||xhr.status ===304)){
}
}
}
isDataOk = true; //數(shù)當(dāng)狀態(tài)變?yōu)?時(shí),表示數(shù)據(jù)到來
xhr.open();
xhr.send();
isDataOk = false; //在數(shù)據(jù)發(fā)送完成之后,表示數(shù)據(jù)還未到來,點(diǎn)擊無效
})
封裝一個(gè) ajax 函數(shù),能通過如下方式調(diào)用。后端在本地使用server-mock來 mock 數(shù)據(jù)
function ajax(options){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status === 200 || xhr.status ===304){
var result = JSON.parse(xhr.responseText)
options.success(result)
}
else{
options.error()
}
}
dataIsOk = true;
}
var query = '?'
for(key in options.data){
query += key + '=' + options.data[key] + '&'
}
query = query.substr(0,query.length-1)
var url = options.url +query
xhr.open(options.type,url,true)
xhr.send()
dataIsOk = false;
}
實(shí)現(xiàn)加載更多的功能,后端在本地使用server-mock來模擬數(shù)據(jù)
代碼如下:
https://github.com/wzanbaichi/loadmore/blob/master/index.html