SSM项目中实现Ajax轮询——定时的通过Ajax查询服务端

轮询(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
优点:后端程序编写比较容易。

缺点:请求中有大半是无用,浪费带宽和服务器资源。实例:适于小型应用。

前端:

 
  

<div id="p" class="easyui-panel" title="我的消息"
     style="width:248px;height:200px;"
     data-options="iconCls:'icon-ms',collapsible:true">
        <span id="tongzhi" style="display:none; padding: 20px; color: red; font-size: 28px;"> 您有<a href="#"><strong id="tongzhi-content">0strong>a>条客户新消息span>
div>


//消息局部定时刷新
setTimeout(function(){
    Push();
},200);
setInterval(function(){
    Push();
},3000);
function Push(){
    $.ajax({
        type:"POST",
        url:"getsum.action?dt=" + new Date().getTime(),//why getTime and wont use
        data:{},
        beforeSend:function(){},
        success: function(data){
            var obj=eval("("+data+")");//eval使用前要先加括号,才能得到完整的json数据
            if(obj.msg!=0){
                $("#tongzhi-content").html(obj.msg);//更新提示内容中的数量部分
                $("#tongzhi").show();//消息提示内容,整个部分都显示出来
                $('#p').panel('open').panel('refresh');
            }else{
                $("#tongzhi").hide();//隐藏整个提示消息部分
            }
        }
    });
}

service类:

/**定时获取消息
 * 
 */
public int getAccount(Integer emp_id);

xml类:



<select id="getAccount" parameterType="java.lang.Integer" resultType="java.lang.Integer">
    SELECT count(*) FROM number WHERE num_telstate=0   AND  num_state=1 AND emp_id=#{arg0};
select>

controller类:


/**
 * 用来及时消息推送
 * @param request
 * @param response
 * @throws Exception
 */
@RequestMapping("getsum")
public void getsum(HttpServletRequest request,HttpServletResponse response) throws Exception{
    HttpSession session = request.getSession();
    Employee emp= (Employee) session.getAttribute("user");
    try {
        //获取话务中待领取总数
        int count=numberService.getAccount(emp.getEmp_id());
        StringBuffer json =new StringBuffer("{");
        json.append("'msg':'"+count+"'");
        json.append("}");// 构造json数据格式
        PrintWriter out = response.getWriter();
        out.write(json.toString());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


你可能感兴趣的:(其它)