使用Ajax轮询模拟简单的站内信箱(消息管理)功能
前一段时间项目需要写一个类似于站内信箱的消息管理的功能,由于对前端不是很熟悉,刚开始不知道怎么做,后来看了网上的方案,现模拟一个非常简单的消息管理。
我们首先看一下最终效果的样式,就是非常简单的一个样子,如下所示:
我这边暂时只写了三个类型的消息,订单、上下架、审核。不同的消息推送过来会显示在不同类型上,消息管理上显示的是三种类型的消息总数量。
好,接下来介绍一下代码。首先是数据库的设计,共有七个字段,分别是一个自增字段id,消息类型type,消息标题title,消息具体内容detail,消息状态status,创建时间time以及用户userId。如下所示:
然后我们看推送消息的后台代码PullMsgServlet,分别有四个方法,分别是获取所有消息的历史记录,获取某人的未读消息,获取未读消息的总数,还有获取某种类型的未读消息总数。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String operateType = Base64Util.decode(request.getParameter("operateType"));
msgDao = new MessageDao();
switch (operateType) {
case "showHistory":
showHistory(request, response);
break;
case "showPending":
showPending(request, response);
break;
case "showCount":
showCount(request,response);
break;
case "showCountByType":
showCountByType(request, response);
break;
default:
break;
}
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(Base64Util.encode(result.toString()));
} /**
* 所有消息的历史记录
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void showHistory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
HttpSession session = request.getSession();
userId = session.getAttribute("userId").toString();
List<Object> historyList = msgDao.getMsgByUserId(userId);
HttpResultList result = new HttpResultList();
result.setResult(historyList.size()>0);
result.setDatas(historyList);
} /**
* 某人的未读消息
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void showPending(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
HttpSession session = request.getSession();
userId = session.getAttribute("userId").toString();
List<Object> pendingList = msgDao.getUnreadMsg();
HttpResultList result = new HttpResultList();
result.setResult(pendingList.size()>0);
result.setDatas(pendingList);
} /**
* 某人未读消息的总数
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void showCount(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String number = msgDao.getMsgNum()+"";
result = new JSONObject();
result.put("result", number);
} /**
* 某人某种类型的未读消息总数
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void showCountByType(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
Map<String, Integer> map = msgDao.getTypeNum();
//获得返回的type
List<String> keyList = new ArrayList<>();
for (String key : map.keySet()) {
keyList.add(key);
}
//获得返回type的个数
List<Integer> valueList = new ArrayList<>();
for (Integer value : map.values()) {
valueList.add(value);
}
result = new JSONObject();
JSONObject content = new JSONObject();
content.put("type", JSONArray.fromObject(keyList));
content.put("typeNum", JSONArray.fromObject(valueList));
result.put("result", content);
}
接下来我们看前端代码,这边使用了setInterval定时器,设置的js代码每5秒轮询后台一次,请求后台servlet从数据库里面获取的数据,如下所示:
setInterval(function(){
getType();
},5000); /**
* 得到某个类型的消息数量
*/
function getType(){
var lis = document.getElementById("type").getElementsByTagName("li");
var msgType = "";
for(var i=0; i<lis.length; i++){
msgType = lis[i].innerText;
}
$.ajax({
type:"POST",
url:"PullMsgServlet",
dataType:'json',
processData:false,
data: {
operateType: "showCountByType"
},
success:function(data){
var result = data.result;
var type = "";
if(result){
for(var i=0; i<result.type.length; i++){
type = result.type[i];
if(type == "订单"){
$("#order").html(result.typeNum[i]);
}else if(type == "上下架"){
$("#shelf").html(result.typeNum[i]);
}else if(type == "审核"){
$("#review").html(result.typeNum[i]);
}
}
}
},
error: function () {
// alert("error...");
}
});
}
这样前端每隔5秒就轮询一次PullMsgServlet,查询数据库里是否有未读的消息,如果有,就显示在前端页面上。这样,一个最简单的消息推送以及显示功能就有了,只是我还没有写前端历史列表的查看,等以后写了再更新。。。。
使用Ajax轮询模拟简单的站内信箱(消息管理)功能的更多相关文章
- 浅谈Websocket、Ajax轮询和长连接(long pull)
最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下. 1.什么是Websocket Websocket是HTML5中提出的新的协议,注意,这里是协议,可以 ...
- 浅谈Websocket、Ajax轮询和长轮询(long polling)
浅谈Websocket.Ajax轮询和长轮询(long p0ll) 最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下. 1.什么是Websocket W ...
- WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】
一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的ke ...
- long poll、ajax轮询和WebSocket
websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享.废话这么多了,最后再赞一个~ WebSocket是出的东西(协 ...
- AJAX轮询的实时监控画面
上一篇我们通过异步刷新Ajax 技术,来实现监控页面监控位号值的刷新,采用Ajax (Asynchronous Javascript And XML)技术,是指一种创建交互式.快速动态网页应用的网页开 ...
- Flask框架:运用Ajax轮询动态绘图
Ajax是异步JavaScript和XML可用于前后端交互,在之前<Flask 框架:运用Ajax实现数据交互>简单实现了前后端交互,本章将通过Ajax轮询获取后端的数据,前台使用echa ...
- Flask框架:如何运用Ajax轮询动态绘图
摘要:Ajax是异步JavaScript和XML可用于前后端交互. 本文分享自华为云社区<Flask框架:运用Ajax轮询动态绘图>,作者:LyShark. Ajax是异步JavaScri ...
- Ajax轮询以及Comet模式—写在Servlet 3.0发布之前(转)
2008 年的夏天,偶然在网上闲逛的时候发现了 Comet 技术,人云亦云间,姑且认为它是由 Dojo 的 Alex Russell 在 2006 年提出.在阅读了大量的资料后,萌发出写篇 blog ...
- ajax轮询实时获取数据
最近做一个评论功能时,想要实现实时异步刷新评论功能,于是使用了ajax轮询,这里简单记录一下ajax轮询的原理及使用方法. ajax轮询的原理就是客户端定时向服务端发送ajax请求,服务器接到请求后马 ...
随机推荐
- PHP算法之冒泡排序
//冒泡排序 //①思路,先比较出第一次,找一个最大的值,排到最后; //②重复count遍之后,就能得到排序; //③优化,每一次循环之后不需要再次全部重复; $array = [11,5,4,58 ...
- TCP/IP 详解常用术语
业务需要,最近看TCP/IP 这本书,专业名词太多了,总结一下,给后来着参考,直接使用. 后续会在读书时慢慢添加. ACK:(ACKnowledgment)TCP首部中的确认标志. ARP:地址解析协 ...
- dedecms搜索模板,使用{dede:list}标签调用自定义字段不显示(空白)
前几天使用织梦做一个搜索功能,正常使用{dede:list}调用自定义内容模型中的自定义字段,代码如下:(自定义字段的调用可以参考:http://www.dede58.com/a/dedejq/523 ...
- 剑指Spring源码(一)
Spring,相信每个Java开发都用过,而且是每天都在用,那强大又神秘的IoC,AOP,让我们的开发变得越来越简单,只需要一个注解搞定一切,但是它内部到底是什么样子的呢?跟着我,一起探究Spring ...
- MySQL查询昨天的数据
SELECT * FROM `表名` WHERE TO_DAYS(`时间字段名`) = TO_DAYS(NOW()) - 1; 需要前几天的话就在后面减几天.
- Java核心技术及面试指南:视频列表
如下是本书相关内容的视频列表,会动态更新 第一章 1 视频1.1 JDK和JRE和JVM的区别,安装Java开发环境 1.1.1 第2页 2 视频1.2 编写第一个HelloWorld程序 ...
- ldap配置系列三:grafana集成ldap
ldap配置系列三:grafana集成ldap grafana的简介 grafana是一个类似kibana的东西,是对来自各种数据源的数据进行实时展示的平台,拥有这牛逼的外观.给一个官方的demo体验 ...
- LeetCode专题-Python实现之第26题:Remove Duplicates from Sorted Array
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- Java开发知识之Java入门
Java开发知识之Java入门 一丶了解JAVA的版本 JAVA 有三个版本 JAVA SE: 标准版,开发桌面跟商务应用程序 JAVA SE 包括了Java的核心类库,集合,IO 数据库连接 以及网 ...
- GBDT 算法:原理篇
本文由云+社区发表 GBDT 是常用的机器学习算法之一,因其出色的特征自动组合能力和高效的运算大受欢迎. 这里简单介绍一下 GBDT 算法的原理,后续再写一个实战篇. 1.决策树的分类 决策树分为两大 ...