ajax 无刷新 实现页面右下角弹出消息提示框

程序类似OA办公系统,用的是FineUI这样的ext控件,很简单,页面布局也很便捷,用起来方便,重点是不用美工哦,而且提供一套完整的实例。

因为是办公系统吧,在我们使用中需要完成一系列的流程,其中有一模块是请假的申请以及审批的部分,需要实现某部门的领导只要开着这个系统,有属下申请请假就要能及时看到,并且审批。

如图中的右下角的消息通知框,这是刚刚登陆系统时进行的查询,但是在登陆之后要想要这种消息框时时的弹出需要完成的工作时,用到ajax就可以了实现了

首先,登陆的主页面的前台写个ajax

<script type="text/javascript">
        realtimewarm();
        var interval = window.setInterval(realtimewarm, 120000);

        function realtimewarm() {
            $.ajax({
                //要用post方式   
                type: "Post",
                //方法所在页面和方法名   
                url: "BaseData/ProcessMainType/AuditMain/Handler.ashx", //请求url                
                cache: false,  //无缓存                 
                timeout: 1000 * 130,  //AJAX请求超时时间为60秒                  
                data: { time: 120 },
                success: function (data, textStatus) {
                    //返回的数据用data.d获取内容   
                    if (data != null && data != "") {
                        showmsg('消息通知', data); //setTimeout(function () { }, 5000)
                    }
                    //setInterval(realtimewarm, 10000);
                    //realtimewarm();
                },
                error: function (err) {
                    //setInterval(realtimewarm, 10000);
                }
            });
        }
</script>

不断的向Handler.ashx 页面请求数据,注意:var interval = window.setInterval(realtimewarm, 120000); 这句哦,
在Handler.ashx页面中的代码(这里说一句,如果要让进程在使用中做过多时间的睡眠是不理想的,System.Threading.Thread.Sleep(1000)像是这个时间还比较短,这种方式也是在这个Handler页面隔段时间查询数据库吗,也是有一定的性能问题的,所以不可让进程有过多的时间停留,因为在休眠也是在访问服务器,只是服务器没有给出回应,就像你电话给别人,别人没有说话,但是话费还是要一样的付,如果停留时间很长,所有的用户都在反复查询,那么服务器的内存马上就会受不了的)

 public void ProcessRequest(HttpContext context)
    {
        int SendTime = 0;  //最多等待时间              
        if (context.Request.Form["time"] != null && context.Request.Form["time"].ToString() != "")
        {
            SendTime = int.Parse(context.Request.Form["time"].ToString());//接收传来的的后台要保持时间             
        }
        int i = 0;//计算超时时间(秒)              
        while (true)
        {
            System.Threading.Thread.Sleep(1000);//停留一千毫秒(1秒)                  
            i++;
            if (i < SendTime)
            {
                string export = GetStartupScript();//具体的方法,用来实现所需的操作
                if (!string.IsNullOrEmpty(export))
                {
                    context.Response.Write(export);
                    break;
                }
            }
            else
            {
                context.Response.Write(null);
                break;
            }
        }
    }
 public string GetStartupScript()
    {
      StringBuilder strshows = new StringBuilder();
      strshows.Append("<ul style="list-style-type:disc ;">");
     string strShowTipsHRQJ = ShowTipsHRQJ();//请假审批的提醒
        if (!string.IsNullOrEmpty(strShowTipsHRQJ))
        {
            strmores.Append(strShowTipsHRQJ);
         }
    }
  //这里写各种审批判断(请假)
    private static string ShowTipsHRQJ()
    {
        string returns = string.Empty;
        PublicCookie publiccookie = new PublicCookie();
        string groupid = publiccookie.GetCurrentPublicWay().Groupid;//当前登陆者的用户组
        Tips tips = new Tips();
        DataTable tmptips = tips.GetAuditMainHRQJ(groupid);
        if (tmptips.Rows.Count != 0)
        {
            int count = tmptips.Rows.Count;
            System.Text.StringBuilder strSupplyname = new System.Text.StringBuilder();
            strSupplyname.Append("您有").Append(count).Append("条请假申请需要审批!");
            returns = "<li><a href="#" onclick="openNew('请假审批','./BaseData/ProcessMainType/AuditMain/AuditMainAlone.aspx');return false;">" + strSupplyname.ToString() + "</a></li>";
        }
        return returns;
    }

export中就是所拼接好的显示内容,然后放在js中,在管理系统的最前面的页面中显示出来就可以了,下面是用来显示右下角弹出窗体的js

function showmsg(title, content) {//第一个参数是显示的标题,第二个是显示的内容
    var jiema = decodeURIComponent(content);
    for (var i = 0, j; i < jiema.length; i++) {
        j = jiema.charAt(i);
        if (j == '+')
        jiema=jiema.replace("+", " ");
    }
    var tihuan = jiema;
    //alert(tihuan);
    var tipw = new MyLib.TipsWindow({
        title: title,
        autoHide: 60, //60秒自动关闭  
        html: tihuan
    });
    tipw.show();
原文地址:https://www.cnblogs.com/wningning/p/3252291.html