设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 104|回复: 5
打印 上一主题 下一主题

[求助]无刷新鲜花鸡蛋投票

[复制链接]
跳转到指定楼层
1#
发表于 2010-1-10 06:32:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
无刷新鲜花鸡蛋投票代码,不知何故不成功,以下是代码:
ajax.js代码
function v(){
return;
}
//Ajax Start
function Ajax_GetXMLHttpRequest() {
if (window.ActiveXObject) {
  return new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
  return new XMLHttpRequest();
}
}
function Ajax_CallBack(ID,URL){
var x = Ajax_GetXMLHttpRequest();
var ID = document.getElementById(ID);
x.onreadystatechange = function(){
if(x.readyState == 4){
if(x.status == 200){
if(x.responseText!=""){
ID.innerHTML=x.responseText;
}else{
alert('您已投过票,不可以重复投票!');}}}}
        x.open('GET',URL,true);
        x.send(null);
}
//Ajax End


页面代码:


<!--#include File="conn.asp"-->
<script language="javascript" src="ajax.js"></script>
<%set rs=server.CreateObject("adodb.recordset")
sql="select * from news"
rs.open sql,conn,1,1%>
<%n=0
do while not rs.eof%>

<div><a href="javascript:v()" onclick="javascript:Ajax_CallBack('support<%=Rs("id")%>','FlowerEgg.asp?PostID=<%=Rs("id")%>&Status=support')" title="支持一下"><img src="images/1+.gif" width="20" height="20" border="0"></a>[<span id="support<%=Rs("id")%>"><%=rs("flower")%></span>]   <a href="javascript:v()" onclick="javascript:Ajax_CallBack('oppose<%=Rs("id")%>','FlowerEgg.asp?PostID=<%=Rs("id")%>&Status=oppose')" title="反对!"><img src="images/1-.gif" width="20" height="20" border="0"></a>[<span id="oppose<%=Rs("id")%>"><%=rs("egg")%></span>]</div>

<%
rs.movenext
n=n+1
if n=10 then exit do
loop
rs.close
%>


FlowerEgg.asp文件代码:

<!--#include file="conn.asp"-->
<%
postID=Request("PostID")
s=Request("status")
if IsNumeric(postID)=true then
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "select * from [news] where ID="&PostID
rs.Open sql,conn,3,2
if instr("|"&Rs("BallotIPList"),"|"&Request.ServerVariables("REMOTE_ADDR")&"|")>0 then
Response.write("")
  rs.close
else
  if s="support" then
   flower=rs("flower")+1
   rs("flower")=flower
   rs("BallotIPList")=rs("BallotIPList")&Request.ServerVariables("REMOTE_ADDR")&"|"
   rs.Update
   rs.close
   response.write(flower)
   response.write""&rs("BallotIPList")&""
  elseif s="oppose" then
   egg=rs("egg")+1
   rs("egg")=egg
   rs("BallotIPList")=rs("BallotIPList")&Request.ServerVariables("REMOTE_ADDR")&"|"
   rs.Update
   rs.close
   response.write(egg)
end if
end if
end if
%>
2#
发表于 2010-1-10 06:32:18 | 只看该作者
你这样投票方式肯定不行,问题出在FlowerEgg.asp文件里

你把投票者的IP记录下来,按照“|”分隔,这样是不科学的
那样你的BallotIPList字段要存储多大的数据啊,除非BallotIPList字段设置成备注

if instr("|"&Rs("BallotIPList"),"|"&Request.ServerVariables("REMOTE_ADDR")&"|")>0 then

这个判断中怎么会有逗号?而且这样判断也是不科学的
而你写进去的时候并没有带入逗号:
rs("BallotIPList")=rs("BallotIPList")&Request.ServerVariables("REMOTE_ADDR")&"|"

你应该在查询条件这里where ID="&PostID 加个模糊查询

where BallotIPList like '"&Request.ServerVariables("REMOTE_ADDR")&"' and ID="&PostID

这样就可以判断该IP是否存在
下面使用
if not(rs.eof and rs.bof) then
Response.write("")
else
…………
end if
回复 支持 反对

使用道具 举报

3#
发表于 2010-1-10 06:32:22 | 只看该作者
或者在open的时候后面加个随机数使每次的url都不同

    url=location.href.substring(0,location.href.lastIndexOf("/"))+"/AjaxNews.asp?page="+page+"&rnd="+Math.round(Math.random()*10000);

    http.open("GET",url,true);
回复 支持 反对

使用道具 举报

4#
发表于 2010-1-10 06:32:26 | 只看该作者
一楼的代码已被修改,投票后可及时无刷新正确显示结果。但有这样一个问题:

投票后,被点项(如鲜花)再次点击投票不弹出"您已投过票,不可以重复投票!",点击相对应的项(鸡蛋)投票能弹出此提示框。如果更新缓存或关闭ie重新打开网页才能点击鲜花或鸡蛋均弹出提示框!
是不是js有问题?请求帮助。
回复 支持 反对

使用道具 举报

5#
发表于 2010-1-10 06:32:30 | 只看该作者
FlowerEgg.asp文件顶部加个禁止缓存代码
<%
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
%>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-19 06:18 , Processed in 0.078366 second(s), 9 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表