.net动态显示服务器上面的时间(只向服务器发送一次请求)
在页面中,我们要动态的显示服务器上面的时间,我一开始的思路就是:使用js的setInterval()方法,每隔1秒钟就发一次ajax请求向服务器获取一次时间,但是这样就会有一个问题,每隔一秒就向服务器发送了一次ajax请求,虽然耗时只有20ms左右,但是一直这样不断请求加重了服务器负担。于是我转变了思路:那就是我在页面第一次加载时向服务器发送一次ajax请求拿到当前服务器时间,然后每隔一秒就在此时间上加1秒,这里使用js的setInterval方法。事实证明,这样是可以实现的。
var day, Hours, Minutes, Seconds; //第一次加载时从服务器读取时间,然后在本地进行每秒+1秒的显示操作以减轻服务器压力 var changeShowTime = function (data) { var s = data.split(':'); day = s[0]; Hours = s[1]; Minutes = s[2]; Seconds = s[3]; updateTime(); setInterval("updateTime()", 1000); } function updateTime() { if (Seconds > 59) { Minutes++; Seconds %= 60; } if (Minutes > 59) { Hours++; Minutes %= 60; } if (Hours > 23) { Hours %= 24; } var H = Hours; if (H < 10) { H = '0' + H; } var M = Minutes; if (M < 10) { M = '0' + M; } var S = Seconds; if (S < 10) { S = '0' + S; } $("#spnServerTime").html(day + " " + H + ':' + M + ':' + S); Seconds++; } //js加载入口 $(function () { $.post("Ajax/UpateTimeHandler.ashx", { "action": "UpdateTime" }, changeShowTime); //更新时间显示
});
一般处理程序如下:
public class UpateTimeHandler : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; string action = context.Request["action"]; if (action == "UpdateTime") { string day = DateTime.Now.ToString("yyyy-MM-dd"); int hour = DateTime.Now.Hour; int minute = DateTime.Now.Minute; int second = DateTime.Now.Second; string inputTime = day + ":" + hour + ":" + minute + ":" + second; context.Response.Write(inputTime); } } public bool IsReusable { get { return false; } }