AJAX制作JSON格式的实时更新数据的方法
之前有写过这样的文章,但是出现了几个问题,第一,如果每秒都像数据库发送请求势必会造成服务器的压力过大,第二,如果使用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格式的数据返回的时候要带中括号,不然前台页面会找不到数据的
AJAX制作JSON格式的实时更新数据的方法的更多相关文章
- Django-choices字段值对应关系(性别)-MTV与MVC科普-Ajax发json格式与文件格式数据-contentType格式-Ajax搭配sweetalert实现删除确认弹窗-自定义分页器-批量插入-07
目录 models 字段补充 choices 参数/字段(用的很多) MTV与MVC模型 科普 Ajax 发送 GET.POST 请求的几种常见方式 用 Ajax 做一个小案例 准备工作 动手用 Aj ...
- ajax发送json格式与文件数据、django自带的序列化器(了解)
上期内容回顾 聚合查询和分组查询 # 聚合查询 max min sum avg count # 查询关键字:aggregate from django.db.models import Max, Mi ...
- 数据可视化:Echart中k图实现动态阈值报警及实时更新数据
1 目标 使用Echart的k图展现上下阈值,并且当真实值超过上阈值或低于下阈值时候,标红报警. 2 实现效果 如下:
- 实时更新数据的jQuery图表插件DEMO演示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Qt之模型/视图(实时更新数据)
上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变的,那么如何实时更新成了一个很重要的问题!功能:(1)添加委托 ...
- 在PHP代码中处理JSON 格式的字符串的两种方法:
总结: 在PHP代码中处理JSON 格式的字符串的两种方法: 方法一: $json= '[{"id":"1","name":"\u ...
- springmvc4.0配置ajax请求json格式数据
1.导入相关jar包:jackson-annotation-2.5.4.jar,jackson-core-2.5.4.jar,jackson-databind-2.5.4.jar. 2.spring- ...
- SpringMvc+ajax 实现json格式数据传递
传JSON对象 前端 function test () { var param = {username : "yitop"}; $.ajax({ timeout : 20000, ...
- ajax 提交 json格式数据到后台
例子:$.ajax({ type: 'POST', url: "/ROOT/modify.do", contentType: "application/json" ...
随机推荐
- I.MX6 Linux、Jni ioctl 差异
/*********************************************************************** * I.MX6 Linux.Jni ioctl 差异 ...
- bash 的漏洞,你们中招了吗?
http://threatpost.com/major-bash-vulnerability-affects-linux-unix-mac-os-x 检测: $ env x='(){:;}; echo ...
- Oracle 性能相关常用脚本(SQL)
在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考.以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整 ...
- RequireJS入门(一) 转
RequireJS由James Burke创建,他也是AMD规范的创始人. RequireJS会让你以不同于往常的方式去写JavaScript.你将不再使用script标签在HTML中引入JS文件,以 ...
- Word排版成树形结构技巧
初始文字 A A1 A2 B1 B1 B2 C C1 希望效果 关健设置
- MySQL · 引擎特性 · InnoDB 崩溃恢复过程
MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主 ...
- js实现密码加密
http://www.cnblogs.com/mofish/archive/2012/02/25/2367858.html 1.base64加密 在页面中引入base64.js文件,调用方法为: &l ...
- selenium python (五)打印信息及设置等待时间
#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #一般情况下我们要验证打开的页面是否正确,可通过网页的Title和Cur ...
- VS 2013 EFSQLITE
在 vs 2013 上用 1.NuGet程序包来获取,它也会自动下载EF6的包 :system.Data.sqlite 他会自动下载 其它几个需要的包. 2.在Sqlite官网上下载对应的版本:htt ...
- 判断CString字符串中各位是数字,大小写字母,符号,汉字.xml
pre{ line-height:1; color:#1e1e1e; background-color:#e9e9ff; font-size:16px;}.sysFunc{color:#627cf6; ...