您所在的位置:小祥子 » 代码研究 » 正文

第二期:新云ajaxpost.asp文件

时间:2015-01-14 编辑:佚名 来源:互联网

大家好,这是小祥子第二期的代码研究,今天为大家来分析一个无刷新投票文件。

程序:新云CMS4.0sp2

文件位置:common/soft/ajaxpost.ASP

功能:配合JS文件实现无刷新显示投票结果,也就是在软件详情页内有一个好评和差评,点击后马上显示投票后的结果。

鉴于代码不是很长,我这里就连同源代码以及我后来标注的注释一同贴出。

<%
Response.ContentType="text/html"
Response.Expires = -9999
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-ctrol", "no-cache" '定义头部信息
NewAsp.ChkPostAgent() '这是一个检测当前页是否被直接打开还是在详情页被调用,如果直接打开则出现404错误,见inc目录下的cls_main.asp搜索Public Sub ChkPostAgent()
Dim softid,sType,s,m,PJ_CookieName
Dim goodnum,badnum,totalscore,maxwidth,goodwidth,badwidth,goodpercent,badpercent '很明显了,这就是定义下变量

Sub main() '因为这个页面也是被soft/ajaxpost.asp文件调用的,这算是主过程
 softid=NewAsp.ChkNumeric(Request("id"))
 sType=NewAsp.ChkNumeric(Request("t"))
 s=NewAsp.ChkNumeric(Request("s"))
 m=NewAsp.ChkNumeric(Request("m")) '获取当前参数,以便知道是哪个软件调用
 PJ_CookieName="Soft_PingJia_"&ChannelID&"_"&softid '定义一个cookie名称,防止重复投票,其实这个意义不大,防君子不防小人
 If s=0 Then
  If softid>0 Then Call PostAppraised() '不同的参数调用不同的过程
 Else
  If softid>0 Then Call LoadAppraised()
 End If
End Sub

Sub LoadAppraised() '这个是查询过程
 Dim Rs
 Set Rs = NewAsp.Execute("SELECT softid,good,bad FROM NC_SoftList WHERE softid="&softid) '直接把软件的好评和差评字段数据拉出来
 If Rs.BOF And Rs.EOF Then
  Response.Write "" '没有数据就不显示啦
 Else
  goodnum=CLng(Rs("good"))
  badnum=CLng(Rs("bad"))
  totalscore=goodnum+badnum
  If totalscore>0 Then '如果有投票数据,就计算计算百分比
   goodpercent=FormatPercent(goodnum/totalscore,0,-1)
   badpercent=FormatPercent(badnum/totalscore,0,-1)
  Else
   goodpercent="0%"
   badpercent="0%"
  End If
  goodwidth=GetGoodWidth(m)
  badwidth=GetBadWidth(m)
  Response.Clear
  Response.Write ""&totalscore&","&goodnum&","&badnum&","&goodpercent&","&badpercent&","&goodwidth&","&badwidth&"" '将数据显示出来供JS调用
 End If
 Set Rs = Nothing
End Sub

Sub PostAppraised() '这个是投票过程
 Dim Rs
 If Trim(Request.Cookies(PJ_CookieName)&"")="ok" Then Exit Sub
 Response.Cookies(PJ_CookieName).path = "/"
 Response.Cookies(PJ_CookieName).Expires = Date + 1
 Response.Cookies(PJ_CookieName)="ok"
 If sType=0 Then
  NewAsp.Execute ("UPDATE NC_SoftList SET bad=bad+1 WHERE softid="&softid) '投了个差评
 Else
  NewAsp.Execute ("UPDATE NC_SoftList SET good=good+1 WHERE softid="&softid) '这当然是好评了
 End If
 Call LoadAppraised()
End Sub

Function GetGoodWidth(sVariant) '通过票数计算百分比的那个条条应该有多长
 Dim w
 sVariant=NewAsp.ChkNumeric(sVariant)
 If sVariant=0 Then sVariant=100
 If totalscore>0 Then
  w=NewAsp.ChkNumeric(Fix((goodnum/totalscore)*sVariant))
 Else
  w=1
 End If
 If w<1 Then w=1
 GetGoodWidth=w
End Function

Function GetBadWidth(sVariant) '跟上面一样
 Dim w
 sVariant=NewAsp.ChkNumeric(sVariant)
 If sVariant=0 Then sVariant=100
 If totalscore>0 Then
  w=NewAsp.ChkNumeric(Fix((badnum/totalscore)*sVariant))
 Else
  w=1
 End If
 If w<1 Then w=1
 GetBadWidth=w
End Function
%>

关键词:ajaxpost ajax