題目1: ajax 是什么嚎尤?有什么作用?
ajax全稱是Asynchrous JavaScript XML的縮寫。
作用:與服務器交換數(shù)據(jù)并更新部分網(wǎng)頁,在不重新加載整個頁面的情況下洽沟。
AJAX在瀏覽器和服務器之間使用異步傳輸從服務器獲取數(shù)據(jù),異步指的是脫離當前瀏覽器頁面的請求蜗细、加載等單獨執(zhí)行,這樣就能在不重載頁面的情況下發(fā)送請求然后獲得服務器的返回數(shù)據(jù)怒详。
具體來說,AJAX包括,創(chuàng)建AJAX對象炉媒;發(fā)出HTTP請求;接受服務器傳回的數(shù)據(jù)昆烁;更新網(wǎng)頁數(shù)據(jù)吊骤。
題目2: 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情?后端接口完成前如何 mock 數(shù)據(jù)静尼?
需要注意的事情有:
接口白粉,接口的名稱,命名規(guī)范鼠渺。
接口傳遞的數(shù)據(jù)類型鸭巴,數(shù)據(jù)大小的限制。
接口的一些參數(shù)拦盹,包括服務器鹃祖、端口、方法普舆、請求數(shù)據(jù)的一些限制服務器恬口、端口、方法沼侣、請求數(shù)據(jù)的一些限制祖能。
可以自己使用服務器框架搭建一個模擬服務器環(huán)境,模擬數(shù)據(jù)傳輸和請求查看蛾洛。
題目3:點擊按鈕养铸,使用 ajax 獲取數(shù)據(jù),如何在數(shù)據(jù)到來之前防止重復點擊?
var isDataArrive=false;
btn.addEventListener('click',function(){
if(isDataArrive){return}
isDataArrive=true;
xhr=new XMLHttpRequest();
xhr.onreadystate=function(){
if(xhr.readyState===4){
if(xhr.status===200||xhr.status===304){
//do something
}else{
console.log('出錯了!')
}
isDataArrive=false;
}
}
xhr.open('.....')
shr.send()
})
題目4:封裝一個 ajax 函數(shù)揭厚,能通過如下方式調(diào)用却特。后端在本地使用server-mock來 mock 數(shù)據(jù)
function ajax(opts) {
opts.success=opts.success||function(){};
opts.error=opts.error||function(){};
opts.type=opts.type||'get';
opts.dataType=opts.dataType||'json';
opts.data=opts.data||{};
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function(){
if(xmlhttp.status===200||xmlhttp.status===304){
if(opts.dataType==='text'){
opts.success(xmlhttp.responseText)
}
if(opts.dataType==='json'){
var json=JSON.parse(xmlhttp.responseText);
opts.success(json);
}
}else{
opts.error();
}
}
var dataStr='';
for(var key in opts.data){
dataStr+=key+'='+opts.data[key]+'&';
}
dataStr=dataStr.substr(0,dataStr.length-1);
if(opts.type.toLowerCase()==='post'){
xmlhttp.open(opts.type,opts.url,true);
xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xmlhttp.send(dataStr);
}
if(opts.type.toLowerCase()==='get'){
xmlhttp.open(opts.type,opts.url+'?'+dataStr,true);
xmlhttp.send()
}
}
document.querySelector('#btn').addEventListener('click', function(){
ajax({
url: '/login', //接口地址
type: 'get', // 類型, post 或者 get,
data: {
username: 'xiaoming',
password: 'abcd1234'
},
success: function(ret){
console.log(ret); // {status: 0}
},
error: function(){
console.log('出錯了')
}
})
});
題目5:實現(xiàn)加載更多的功能筛圆,后端在本地使用server-mock來模擬數(shù)據(jù)
代碼
本地測試成功