我正在开发一个对时间非常敏感的 Web 应用程序。给我的业务规则之一是应用程序的行为必须始终取决于 Web 服务器上的时间,而不管客户端时钟上的时间。为了让用户清楚这一点,我被要求在 Web 应用程序中显示服务器的时间。
为此,我编写了以下 Javascript 代码:
clock = (function () {
var hours, minutes, seconds;
function setupClock(updateDisplayCallback) {
getTimeAsync(getTimeCallback);
function getTimeCallback(p_hours, p_minutes, p_seconds) {
hours = p_hours;
minutes = p_minutes;
seconds = p_seconds;
setInterval(incrementSecondsAndDisplay, 1000);
}
function incrementSecondsAndDisplay() {
seconds++;
if (seconds === 60) {
seconds = 0;
minutes++;
if (minutes === 60) {
minutes = 0;
hours++;
if (hours === 24) {
hours = 0;
}
}
}
updateDisplayCallback(hours, minutes, seconds);
}
}
// a function that makes an AJAX call and invokes callback, passing hours, minutes, and seconds.
function getTimeAsync(callback) {
$.ajax({
type: "POST",
url: "Default.aspx/GetLocalTime",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var date, serverHours, serverMinutes, serverSeconds;
date = GetDateFromResponse(response);
serverHours = date.getHours();
serverMinutes = date.getMinutes();
serverSeconds = date.getSeconds();
callback(serverHours, serverMinutes, serverSeconds);
}
})
}
return {
setup: setupClock
};
})();
传入的函数updateDisplayCallback
是一个在网页上显示日期的简单函数。
基本思想是Javascript进行异步调用以查找服务器的时间,将其存储在客户端上,然后每秒更新一次。
起初,这似乎可行,但随着时间的推移,显示的时间每分钟落后几秒钟。我让它通宵运行,当我第二天早上进来时,它已经关闭了一个多小时!这是完全不可接受的,因为 Web 应用程序可能一次保持打开数天。
如何修改此代码,以便网络浏览器连续准确地显示服务器的时间?