之前有写过这样的文章,但是出现了几个问题,第一,如果每秒都像数据库发送请求势必会造成服务器的压力过大,第二,如果使用JS的话,是不可以取得系统时间的,因为JS运行在客户端,所以只能取得客户端时间,

如此的话,就需要在后台计算好时间差,然后前台得到时间差进行倒计时计算,并且更新数据

JS代码如下:

 var i = ;
var ballNum = "";
var flag = true;
var timer_showCountDown = null;
var leftTime; function showLeftTime(){
ShowCountDown(leftTime);
} /*-------------------------倒计时------------------------*/
function ShowCountDown(sysTime) {
console.warn(sysTime);
var minute, second;
if (isNaN(leftTime)) {
leftTime = sysTime;
} else {
leftTime = sysTime;
}
minute = Math.floor(leftTime / ( * )) % ;//分
second = Math.floor(leftTime / ) % ;//秒
//把分钟和秒钟如果是一位数就变为两位数
if (minute < ) {
minute = "" + minute;
}
if (second < ) {
second = "" + second;
}
//如果倒计时为负数,就设置为00:00
if (leftTime < ) {
//$("#dendtime").html("00" + ":" + "00");//倒计时的时间,M表示分钟,S表示秒钟 } else {
$("#dendtime").html(minute + ":" + second);//倒计时的时间,M表示分钟,S表示秒钟
}
leftTime = (parseInt(leftTime) - ).toString();
}
/*-------------------------倒计时 end------------------------*/ /*-------------------------显示开奖结果------------------------*/
function showWinNum(msg) {
$("#dendtime").html("" + ":" + "");//倒计时的时间,M表示分钟,S表示秒钟 var numb1 = msg[].getName.split("");//把期号分解成数组 var numb2 = "";
//把期号重新拆分处理
for (var i = ; i < numb1.length; i++) {
numb2 = numb1[numb1.length - i - ] + " " + numb2;
}
numb2 = numb2.substring(, numb2.length - );//得到新的期号 var numb3 = msg[].getInfo.split(" ");//把球号分解成数组
//这里暂时把跑号码球的方法变为直接显示号码球
$("#num1").html("<li class=\"mt15\">" + numb3[] + "</li>");
$("#num2").html("<li class=\"mt15\">" + numb3[] + "</li>");
$("#num3").html("<li class=\"mt15\">" + numb3[] + "</li>");
$("#num4").html("<li class=\"mt15\">" + numb3[] + "</li>");
$("#num5").html("<li class=\"mt15\">" + numb3[] + "</li>");
var numb4 = "";
//把球号重新拆分处理
for (var i = ; i < numb3.length; i++) {
numb4 = numb3[numb3.length - i - ] + "----------------------------------------------------" + numb4;
} numb4 = numb4.substring(, numb4.length - );//得到新的球号
ballNum = msg[].getInfo;//将数据库里面取到的号码球的值存入一个变量 $("#num").html(msg[].getName);//期号
$("#nextNum").html(msg[].getNum);//下一期的期号
//后台运行语音报号
setTimeout(play("第" + numb2 + "期开奖号码是" + numb4 + ",感谢您的关注"), );
}
/*-------------------------显示开奖结果 end------------------------*/ /*-------------------------语音报号------------------------*/
swfobject.embedSWF("Share/sampleDemo.swf", "sampleDemo", "", "", "9.0.0", "Share/expressInstall.swf");
function play(c) {
var item = {};
item.text = c;
swfobject.getObjectById("sampleDemo").onSynthsize(item);
}
/*-------------------------语音报号 end------------------------*/ function setTimeOutPost() {
$.ajax({
type: "post",
url: "/Lottery/DoDataMethod/GetKLCData.ashx",
dataType: "json",
async: true,
success:
function (msg) {
leftTime = msg[].getSysTime;
//首先倒计时
if (timer_showCountDown != null) {
clearInterval(timer_showCountDown);
}
timer_showCountDown = setInterval(showLeftTime, ); //如果开奖结果有变化,则重新显示并报号
if (ballNum != msg[].getInfo) {
showWinNum(msg);
} //10秒调用一次AJAX方法更新数据
setTimeout(setTimeOutPost, );
}
,
error: function (req) {
//alert(req.readyState);//出错时提示出错状态
}
});
}
window.onload = function () {
setTimeOutPost();
}

后台代码如下:

 context.Response.ContentType = "application/json";

        string[] Info = new string[];
string ConStr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
//得到上期开出的数据
string GetDate = @"
SELECT
TOP 1
[ID]
,[LotteryID]
,[Name]
,[StartTime]
,[EndTime]
,[ChaseExecuted]
,[IsOpened]
,[WinLotteryNumber]
,[OpenOperatorID]
,[State]
,[StateUpdateTime]
,[OpenAffiche]
FROM [T_Isuses]
WHERE EndTime<getdate() and WinLotteryNumber<>'' and [IsOpened]=1
ORDER BY [EndTime] desc
"; //得到本期的时间
string GetNowTime = @"
SELECT
TOP 1
[ID]
,[LotteryID]
,[Name]
,[StartTime]
,[EndTime]
,[ChaseExecuted]
,[IsOpened]
,[WinLotteryNumber]
,[OpenOperatorID]
,[State]
,[StateUpdateTime]
,[OpenAffiche]
FROM [T_Isuses]
WHERE IsOpened=0 and EndTime>(
SELECT
TOP 1
[EndTime]
FROM [T_Isuses]
WHERE EndTime<getdate() and WinLotteryNumber<>'' and [IsOpened]=1 and LotteryID=79
ORDER BY [EndTime] desc
) and LotteryID=79 order by Name
"; using (SqlConnection conn = new SqlConnection(ConStr))
{
conn.Open();
SqlCommand comm = new SqlCommand(GetDate, conn);
SqlDataReader reader = comm.ExecuteReader(); while (reader.Read())
{
Info[] = reader["WinLotteryNumber"].ToString();
Info[] = reader["Name"].ToString();
Info[] = (Convert.ToInt32(Info[].ToString().Substring(, )) + ).ToString();
if(Info[].Length<=)
{
Info[] = "" + Info[];
}
}
reader.Close();
}
using (SqlConnection Nowconn = new SqlConnection(ConStr))
{
Nowconn.Open();
SqlCommand nowComm = new SqlCommand(GetNowTime, Nowconn);
SqlDataReader NowReader = nowComm.ExecuteReader();
while (NowReader.Read())
{
Info[] = NowReader["EndTime"].ToString();
}
NowReader.Close();
}
TimeSpan dtime = Convert.ToDateTime(Info[]) - Convert.ToDateTime(System.DateTime.Now);//开奖时间减去系统时间
var outTime = (dtime.Minutes * ) + (dtime.Seconds * ) + ;//结果换算成毫秒数
string obj = "[{\"getInfo\":\"" + Info[] + "\",\"getName\":\"" + Info[] + "\",\"getNum\":\"" + Info[] + "\",\"getSysTime\":\"" + outTime + "\"}]";
context.Response.Write(obj);

需要注意的是JSON格式的数据返回的时候要带中括号,不然前台页面会找不到数据的

最新文章

  1. git
  2. RealSense开发-搭建C#开发环境
  3. 让ie6对png透明图片支持起来
  4. Win10/UWP新特性—Drag&amp;Drop 拖出元素到其他App
  5. jquery中的cookie
  6. 使用rman迁移数据库到异机
  7. Mobile phones_二维树状数组
  8. MySQL备份的shell脚本
  9. ip协议的数据分片备忘
  10. ACM YTU 2018 母牛的故事
  11. asp.net web api long running task
  12. quartz 定时任务的实现
  13. Cortex-M3学习日志(四) -- UART0实验
  14. DevOps的几个场景
  15. Oracle12c从入门到精通(第二版) PDF 下载
  16. 查看本地Git仓库历史修改内容
  17. 【设计模式】—— 组合模式Composite
  18. Unity3D笔记二十 多媒体与网络
  19. Appium+python的单元测试框架unittest(1)(转)
  20. deamo的网址

热门文章

  1. A1377. 楼房重建
  2. asp.net webpage
  3. yaf框架流程二
  4. 【英语】Bingo口语笔记(9) - 表示“不相信”
  5. TCP握手
  6. Javaweb里面的filter,listener,servlet
  7. 平时学习HTML5及其安全相关的一些站点资源
  8. JVM——类加载器的双亲委派模型
  9. Ruby on rail 开发准备
  10. 更新Code First生成的数据库