2.轮询
轮询:前端每隔固定时间向后台发送一次请求,询问服务器是否有新数据
轮询的工作流程
1.前端发送数据
2.后端接收处理数据
3.前端定时请求数据
4.后端返回新数据
一、发送-接收数据
// 前端
<div class="message" id="message">
<div>
<input type="text" id="txt" placeholder="请输入">
{#发送按钮绑定点击事件#}
<input type="button" value="发送" onclick="sendMessage();">
</div>
{#jquery cdn #}
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
// 发送数据
function sendMessage() {
var text = $("#txt").val();
// 基于ajax将用户输入的文本信息发送到后台
$.ajax({
url: '/pool/send/msg/',
type: 'GET',
data: {
text: text
},
success: function (res) {
console.log('请求发送成功', res)
}
})
}
</script>
#views
# 假设DB是我们的缓存数据库
DB = []
def views(request):
return render(request, 'home.html')
def send_msg(request):
print('接收到到前端请求', request.GET)
text = request.GET.get('text')
# 将接收到的请求添加进数据库
DB.append(text)
return HttpResponse('ok')
二、定时请求、更新数据
// 前端
// 设置用户的的数据索引
max_index = 0;
// 每隔固定向后台发送请求获取数据并展示在界面上
setInterval(function () {
// 发送请求获取数据
$.ajax(
{
url: '/pool/get/msg/',
type: 'GET',
data: {
index: max_index
},
success: function (dataDict) {
// 将后端返回到index传给全局变量
max_index = dataDict.max_index
$.each(dataDict.data, function (index, item) {
// 将内容拼接成div标签,添加到message区域
var tag = $('<div>')
tag.text(item)
$("#message").append(tag);
})
}
}
)
}, 1000)// 间隔时间,单位毫秒
#views
def get_msg(request):
index = request.GET.get('index')
index = int(index)
# 将接收到数据从数据库取处理出来返回,通过索引处理,如果是之前到老数据,不重复显示
context = {
'data': DB[index:],
# 将当前用户数据最大索引返回给前端
'max_index': len(DB)
}
return JsonResponse(context)
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)