先说我遇到的问题,我在写一个bbs系统,用到 了struts2 mybatis spring 三个框架,在写查询所有的帖子并且显示在主页面时,我是用struts 2 带的 <s>标签 遍历session数据,将所有的帖子存在了session中, 但是 我想实现一个即时刷新的功能,即有其他人在发帖子 然后我在这可以看到直接更新出来。
最开始我采用的是ajax 调用后台查询数据库更新session 然后我没返回任何数据 当然结果可想而知,前面没更新。然后我看了看别人的 博客 看了看别人的论坛。发现没几个能写好的 然后我就换个思路,不更新session了 然后将list转成json数据并且返回。
话不多说 上代码
后台代码:
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");//解决乱码问题
List<Note>list=userService.checknote();
//将list集合转换成json格式
String json=JSONArray.fromObject(list).toString();
response.getWriter().print(json);
return null;
前台js代码
<script type="text/javascript">
window.setInterval("shownote();",1000);//定时调用这个函数 达到即时刷新的作用
//页面一加载完就运行
$(function(){
shownote();
});
function shownote(){
$.post("user_checkNote",function(data){
var dataObj=eval("("+data+")");
temp=document.getElementById("ul");
lis=temp.getElementsByTagName("li").length;
if(lis<dataObj.length){
$("#ul").html("");
for(var i=0;i<dataObj.length;i++){
$("#ul").append("<li> <a href='${pageContext.request.contextPath }/user_lookdetail?id="+dataObj[i].id+" '>"+dataObj[i].notehead+"</a><br><br></li>");
}
}
});
}
</script>
下面是jsp代码中的<ul><li>
<h3>
<ul id="ul">
</ul>
</h3>
OK 这个就行了 主要是ajax返回数据后 用for循环遍历 用
$("#ul").append
将遍历的添加到<ul>里面,添加之前 应该先判断后台数据是否更新 若更新的话将原本页面上的数据清空,在重新添加。若没有更新就不做操作。