使用server-mock
1.安裝nodejs
2.打開gitbash,執(zhí)行npm install -g server-mock
使用:搭建web服務(wù)器
- 在終端cd到你的文件所在的文件夾
- 執(zhí)行
mock start
可將當(dāng)前文件夾路徑作為根目錄啟動(dòng)一個(gè)web服務(wù)器 - 在瀏覽器中輸入http://localhost:8080/xx.html
題目1: ajax 是什么舌劳?有什么作用坷檩?
Ajax(Asynchronous JavaScript + XML)是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的開發(fā)技術(shù)郎汪,利用Ajax可以向服務(wù)器請(qǐng)求額外的數(shù)據(jù)而無須卸載頁面,會(huì)帶來更好的用戶體驗(yàn)巾乳。
Ajax特點(diǎn):
- Ajax通過JavaScript發(fā)送請(qǐng)求、接受服務(wù)器傳來的數(shù)據(jù),然后操作DOM將新數(shù)據(jù)對(duì)網(wǎng)頁的某部分進(jìn)行更新须眷。
- Ajax的核心是XMLHttpRequest對(duì)象
題目2: 前后端開發(fā)聯(lián)調(diào)需要注意哪些事情鱼响?后端接口完成前如何 mock 數(shù)據(jù)鸣剪?
前后端開發(fā)聯(lián)調(diào)需要注意事項(xiàng):
- 約定接口數(shù)據(jù):包括接口名稱,前端需要傳的查詢數(shù)據(jù)格式,后臺(tái)返回的數(shù)據(jù)格式,請(qǐng)求方式(get/post/...)
- 根據(jù)約定生成接口文檔
mock數(shù)據(jù)方式:
使用nodejs搭建服務(wù)器筐骇,如安裝server-mock债鸡,在項(xiàng)目所在的根目錄創(chuàng)建router.js文件,修改router.js代碼铛纬,添加方法模擬接收前端請(qǐng)求厌均,并返回?cái)?shù)據(jù)。
3:點(diǎn)擊按鈕告唆,使用 ajax 獲取數(shù)據(jù)棺弊,如何在數(shù)據(jù)到來之前防止重復(fù)點(diǎn)擊?
添加一個(gè)判斷數(shù)據(jù)是否到來的isDataArrive變量,4中有實(shí)現(xiàn)擒悬。
4:實(shí)現(xiàn)加載更多的功能模她,效果范例312,后端在本地使用server-mock來模擬數(shù)據(jù)
//router.js
app.get('/loadMore', function(req, res) {
var curIdx = req.query.index
var len = req.query.length
var data = []
for(var i = 0; i < len; i++) {
data.push('新聞' + (parseInt(curIdx) + i))
}
setTimeout(function(){
res.send(data);
},3000);
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>
加載更多
</title>
<style>
ul,li{
margin: 0;
padding: 0
}
#ct li{
list-style:none;
border: 1px solid #ccc;
padding: 10px;
margin-top: 10px;
cursor:pointer;
}
#load-more{
display: block;
margin: 10px auto;
text-align: center;
cursor: pointer;
}
#load-more img{
width: 40px;
height: 40px;
}
.btn{
display: inline-block;
height: 40px;
line-height: 40px;
width: 80px;
border: 1px solid #E27272;
border-radius: 3px;
text-align: center;
text-decoration: none;
color: #E27272;
}
.btn:hover{
background: green;
color: #fff;
}
</style>
</head>
<body>
<ul id="ct">
</ul>
<a id="load-more" class="btn" href="javascript:void(0);">
加載更多
</a>
</body>
<script>
var btn = document.querySelector("#load-more");
var ct = document.querySelector('#ct');
var pageIndex = 0;
var isDateArrive = true; //防止多次點(diǎn)擊造成的多次請(qǐng)求
btn.onclick = function(){
if(!isDateArrive){
return;
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status === 200 || xhr.statue === 304){
var result = JSON.parse(xhr.responseText);
var fragment = document.createDocumentFragment();
for(var i=0;i<result.length;i++){
var li = document.createElement('li');
li.innerText = result[i];
fragment.appendChild(li);
}
ct.appendChild(fragment);
pageIndex += 5;
isDateArrive = true;
}
else {
console.log('出錯(cuò)了');
}
}
}
xhr.open('get','/loadMore?index='+pageIndex+'&length=5',true);
xhr.send();
isDateArrive = false;
}
</script>
</html>