您的位置:首页 > 其它

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

2013-08-12 09:36 411 查看
程序类似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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: