超难高分--无刷新自动实时更新数据并实时显示

Richard1979 2006-04-10 11:47:32
数据库里有积分字段,自用户注册后每分钟自动增加100点积分,前台按秒更新显示。
...全文
906 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
无爱大叔 2006-04-11
  • 打赏
  • 举报
回复
运行这个文件,没有测试hoho
<input type="text" name="UserID" style="border:none">
<SCRIPT LANGUAGE="JavaScript">
function validateuserid()
{
document.body.style.cursor='wait';
if (window.XMLHttpRequest)
oXMLHTTP = new XMLHttpRequest();
else if (window.ActiveXObject)
oXMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");

var sURL = "http://localhost/file.asp"
oXMLHTTP.open("GET", sURL, false);
oXMLHTTP.send();

// 根据返回的结果来显示服务器时间
if (oXMLHTTP.responseText != "")
UserID.value = oXMLHTTP.responseText;
document.body.style.cursor='auto';
window.setTimeout("validateuserid()",1000);
}
validateuserid();
</SCRIPT>


file.asp
<%
if session("cjl_username")<>"" then response.Redirect("main.asp")

//验证用户//////////////////////
if request.form("username")<>"" and request.form("password")<>"" then
username=request.form("username")
password=request.form("password")
set rs=server.createobject("adodb.recordset")
sql="select * from user where username='"&username&"' and password='"&password&"'"
rs.open sql,conn,1,1
if not rs.eof then'存在用户
////////////////////////////////

//查询积分//////////////////////
uid=rs("ID")
set rs1=server.createobject("adodb.recordset")
sql="select * from jifen where userID="&uid
rs1.open sql,conn,1,1
vdate=now-rs1("changedate") '计算未加时间
jf=rs1("jf")+rs("jfadd")*vdate*24 '最终数据
jf=CLng(jf)
'response.write(rs1("jf")&"+"&rs("jfadd")&"*"&vdate&"<br/>")
'response.write(jf)
'response.end
'rs1.close
////////////////////////////////

//更新积分//////////////////////
sql="update jifen set jf="&jf&" where userID="&uid
sql="update jifen set changedate='"&now&"' where userID="&uid
conn.execute(sql)
////////////////////////////////

//全局变量设定//////////////////////
session("userID")=rs("ID")
session("cjl_username")=rs("username")
response.Redirect("main.asp")
////////////////////////////////

else'没有找到用户
message="用户名或密码错误!"
end if
rs.close
end if
%>
游北亮 2006-04-11
  • 打赏
  • 举报
回复
问题解决,奉上代码,谢谢各位了。
数据库我采用用户每次登入更新一次,而前台显示则用javascript计算每秒增加多少,然后显示出来,但不更新数据库。

这种方案在只有自己看自己积分时没有问题,
没有考虑到别人查看这个用户积分的情况.
无爱大叔 2006-04-11
  • 打赏
  • 举报
回复
不难实现,不过服务器肯定受不了的。即使是ajax来做
freeweb 2006-04-11
  • 打赏
  • 举报
回复
啥也不说了~看看这个贴:
http://community.csdn.net/Expert/topic/4672/4672188.xml?temp=.6487543

绝对有你想要的~呵呵~
cyl180555 2006-04-11
  • 打赏
  • 举报
回复
我的思路是只需要两个字段 一个注册时间 regtime 一个是记录其他的分值操作flag 用户登陆后查看积分就是regtime和当前时间的差乘100再加上或减去flag的值 这样我想不会对服务器造成大的负担
Richard1979 2006-04-11
  • 打赏
  • 举报
回复
做到了无误差实时显示,而且非常不耗费服务器资源。

但是我很想知道uddtxgt(闫)兄说的用XML解决办法如何操作。

请指教!
Richard1979 2006-04-11
  • 打赏
  • 举报
回复
问题解决,奉上代码,谢谢各位了。
数据库我采用用户每次登入更新一次,而前台显示则用javascript计算每秒增加多少,然后显示出来,但不更新数据库。

<%
if session("userID")="" then response.Redirect("index.asp")
userID=session("userID")
set rs1=server.createobject("adodb.recordset")
sql="select * from jifen where userID="&userID
rs1.open sql,conn,1,1
jf=rs1("jf")

set rs=server.createobject("adodb.recordset")
sql="select * from user where ID="&userID
rs.open sql,conn,1,1

//查询需更新积分////////////////
vdate=abs(DateDiff("s",Now,rs1("changedate")))
willadd=Clng(rs("jfadd")/60)'每分钟更新一次

jfing=CLng(jf)+Clng(rs("jfadd")*vdate/3600)'上次更新数据库资源+积分*小时
'response.write(rs1("jf")&"+"&rs("jfadd")&"*"&vdate&"<br>")
'response.write(jf)
'response.end
////////////////////////////////
rs.close
rs1.close

//更新数据库积分////////////////
sql="update jifen set jf="&jfing&" where userID="&userID
conn.execute(sql)
sql="update jifen set changedate='"&now&"' where userID="&userID
conn.execute(sql)
////////////////////////////////
%>

<script>
var sec
sec=0
sec+=<%=jfing%>
function tick() {
sec+=<%=willadd%>
Clock.innerHTML = sec;
window.setTimeout("tick();", 1000);//60000每分钟调整一次,1000每秒调整一次
}
window.onload = tick;

</script>

<font id="Clock"></font>
uddtxgt 2006-04-11
  • 打赏
  • 举报
回复
我想你也可以用XML,刚开始就把原始数据取出,之后每增加的量都存在XML对相里面,最后一次性放入数据库,或每隔一定的时间存一次也可以~
大家认为呢~
dafeifei 2006-04-11
  • 打赏
  • 举报
回复
没必要,换种方式吧,
google做的都是全局的,你要为每个人去做,考虑一下服务器效率再说
oldmht 2006-04-11
  • 打赏
  • 举报
回复
包含页面中一分钟更新一次数据
wangflove 2006-04-11
  • 打赏
  • 举报
回复
学习是真理啊……
Richard1979 2006-04-11
  • 打赏
  • 举报
回复
问题解决,奉上代码,谢谢各位了。
数据库我采用用户每次登入更新一次,而前台显示则用javascript计算每秒增加多少,然后显示出来,但不更新数据库。

这种方案在只有自己看自己积分时没有问题,
没有考虑到别人查看这个用户积分的情况.

只要有人查看这个用户,就更新这个用户的数据库。我想这对服务器不会造成压力。
best8625 2006-04-11
  • 打赏
  • 举报
回复
学习一下。。。
邦迪代驾 2006-04-10
  • 打赏
  • 举报
回复
你问版主呀,这个网站不就有这样的例子吗
Richard1979 2006-04-10
  • 打赏
  • 举报
回复
谢谢上面几位兄弟,另谁能帮我解决这个问题,我把我所有的分都给他。
Richard1979 2006-04-10
  • 打赏
  • 举报
回复
不好意思,我分给的太低了。
Richard1979 2006-04-10
  • 打赏
  • 举报
回复
请问mysqlaping兄什么是ajax?

youbl(wolf)兄,就算不实时,每分钟更新一次也行啊,每分钟更新数据库一次,再自动显示出来(这块倒是可以用javascrit来实现)。而且用户量比较大,1000人次/小时
游北亮 2006-04-10
  • 打赏
  • 举报
回复
TO:mysqlaping(处女主任的兄弟)
这位兄弟好象没看清楚LZ的意思.呵呵.
游北亮 2006-04-10
  • 打赏
  • 举报
回复
实时更新不太现实,因为ASP只有在有人访问你的页面时才会运行,如果没有人访问你的页面,那么你的程序永远不会运行.

只能在有人访问你的页面时,把所有的用户的分数根据注册时间统一重新计算一遍.
但是如果用户非常多,你的页面效率就低了
mysqlaping 2006-04-10
  • 打赏
  • 举报
回复
ajax啊
用掉就从数据库里减,
应该很简单的,
加载更多回复(15)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧