<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>加载更多</title>
<style>
.ct{
list-style: none;
padding: 0;
}
.ct li{
margin-bottom: 10px;
border: 1px solid;
cursor: pointer;
height: 38px;
padding-top: 10px;
}
.ct li:hover{
background: green;
color:white;
}
.button {
display: block;
width: 100px;
height: 40px;
line-height: 40px;
margin: 0 auto;
border: 1px solid red;
text-align: center;
text-decoration: none;
color: red;
}
</style>
</head>
<body>
<ul class="ct">
<li>内容1</li>
<li>内容2</li>
</ul>
<a href="#" class="button">加载更多</a>
<script>
var button = document.querySelector('.button')
var content = document.querySelector('.ct')
var xhr = new XMLHttpRequest()
var index = 2
var sendEnd = false
button.addEventListener('click', function (e) {
e.preventDefault()
if (sendEnd){
return
}
xhr.onreadystatechange = function () {
if(xhr.readyState === 4 && (xhr.status == 200||xhr.status == 304)){
//获取数据
var data = JSON.parse(xhr.responseText)
var fragment = document.createDocumentFragment()
for (var i in data){
//创建元素
var li = document.createElement('li')
//将内容放入元素
li.innerText = data[i]
fragment.appendChild(li)
}
content.appendChild(fragment)
sendEnd = false
}
}
xhr.open('get', '/loadMore?index=' + index + '&length=5', true)
xhr.send()
sendEnd = true
index += 5
})
</script>
</body>
</html>
// 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))
}
res.send(data);
});
AJAX 是什么?有什么作用?
第三行的
request.responseText
就是服务器返回的内容了(默认是字符串)这 4 步看起来是有些复杂的,不要紧,jQuery.ajax 对这 4 步进行了封装,只需要一步就可以了:
AJAX 的作用
更好的用户体验(不用刷新页面,或者说只需要刷新部分页面)
前后端开发联调需要注意哪些事情?后端接口完成前如何 mock 数据?
点击按钮,使用 ajax 获取数据,如何在数据到来之前防止重复点击?
实现加载更多的功能,效果范例377,后端在本地使用server-mock来模拟数据
推荐阅读
AJAX 是什么? AJAX-阮一峰 你真的会使用XMLHttpRequest吗? 怎样防止重复发送 Ajax 请求?