DWR技术实现消息已读后更新所有打开页面消息数功能

    最近开发的项目是每次点击链接都会打开一个新窗口打开页面,当在某一个页面进入消息中心处理消息后,所有打开页面的消息数更新成了让我头疼的问题,考虑过定时刷新页面,但是在打开页面较多、使用人数较多时,请求服务器次数过多影响正常功能使用。后来同事给我推荐了DWR服务器反推技术,让我眼前一亮。下面讲开发过程。

  1. dwr测试的例子是用的Clannad_汐的例子,我将jar包及文件导入我的项目后,测试通过。
  2. 接下来在我的功能-消息更新时调用  DwrPush.push(num);方法,但是调用一直不成功,无法更新消息数,我猜想是因为我消息处理页面是在layer打开的页面中,无法更新父页面的回调方法(未证实)。如下是消息页
  3. 然后我就将DwrPush.push(num);放到后面的父页面(统计数所在页面)的setNewsnum方法中,在消息页调用父页面的setNewsnum,成功更新了所有页面的消息数,下面简单贴下自己的代码:
   
 //菜单页面设置消息条数函数
    function setNewsnum(num){
//         $("#news_num").text(num);
        DwrPush.push(num);
    }
    // dwr待办数刷新回调方法
    function DWRcallback(num) {
        if(num=="0"||num==undefined||num==null){
            $("#news_num").hide();
        }else{
            $("#news_num").text(num);
        }
    }
//消息页面更新消息已读,获取未读消息数,并调用上面parent页面的setNewsnum方法

$.ajax({
	 		url:"<%=basePath %>/news/update",
	 		type:"post",
	 		data:{"xnIds":objid},
	 		dataType : "json",
	 		success : function(data){
	 			var result = eval('(' + data + ')');
	 			parent.setNewsnum(result.ALL_NUM);
// 				DwrPush.push(result.ALL_NUM);
	 		}
	 	});

上面代码实现后,在一个页面打开消息列表查看后,其他页面消息数也会刷新,如下

发布了14 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/NEOLyon/article/details/104561384