2

我在 Classic ASP 上的 Session 变量遇到了一些问题。在以下代码的第 19 行,我收到“类型不匹配:'i'”错误

  • debug.asp 是 session.asp 中包含的一个模块,我的程序中的另一个模块
<%
'----------------------------------------------------------------------------
' File:           /include/script/debug.asp
' Author:     Vladimir Charkot
' Create Date:    15/05/2013
' Description:    Generate a server debug log on client
'----------------------------------------------------------------------------


Redim debugTable(2,0)

Sub initDebug(debugLevel)
    Session("debugEntries") = 0
    Session("debugLevel") = "e"
    Call debugMsg("e","Debug initialized")
End Sub

Sub debugMsg(lv, str)
    If IsEmpty(Session("debugEntries")) Then
        i = 0
    Else
        i = Session("debugEntries")  <-- Line 21, Type mismatch error IF CInt() IS APPLIED TO SESSION VARIABLE
    End If
    i = i + 1                        <-- Line 23, Type mismatch error
    Redim Preserve debugTable(2,i)
    debugTable(0,i-1) = lv
    debugTable(1,i-1) = str
    Session("debugEntries") = CInt(i)
End Sub

Function debugToClient()
    Dim list
    Dim func
    list = jsDebugList()
    func = jsDebugFunction(list)
    debugToClient = func
End Function

Function jsDebugList()
    Dim i
    Dim list
    If IsEmpty(Session("debugEntries")) Then
        i = 0
    Else
        i = Session("debugEntries")
    End If
    list = "["
    for n = 0 to i - 2 
    'Add the last one outside the loop
        list = list & "{debugLevel : """ & debugTable(0,n) & """, message : """ & debugTable(1,n) & """}, "
               ' i.e.: {debugLevel : "e", message : "Error on application"},
    next
    list = list & "{debugLevel : """ & debugTable(0,n) & """, message : """ & debugTable(1,n) & """}"
    list = list & "]"
    jsDebugList = list
End Function

Function jsDebugFunction(l)
    Dim f
    f =     "function debug(){"
    f = f & "   debugList = " & l & ";"
    f = f & "   for (elem in debugList){"
    f = f & "       console.log(elem.debugLevel + "": "" + elem.message);"
    f = f & "   }"
    f = f & "}"
    jsDebugFunction = f
End Function


%>
  • 这里是session.asp相关代码,其中调用了debug subs和functions
<!-- #include virtual="/gu/include/script/debug.asp" -->

sub InitSession()
    (...stuff...)
    Call initDebug("e")
end sub

sub CheckSession()

  ' If not a new session, this code has already been executed.
  if stuff then
      timeout()
  end if

  Call debugMsg("e", "CheckSession() Executed")

end sub
  • 最后, session.asp 包含在我的页面文件中,我在浏览器上调用 open 并返回类型不匹配错误。

希望你能帮助我,我真的认为我已经尝试了一切。除了巫毒,黑魔法和那种。谢谢!

4

2 回答 2

3

您在调用debugMsg()方法之前调用initDebug()方法,这导致Session("debugEntries")为空,结果只是一个空字符串。

当尝试将字符串转换为整数时,您确实会收到类型不匹配错误,请注意,i = i + 1它将尝试自动转换。

要解决此问题,请确保始终initDebug()先调用或添加“故障安全”代码:

If Session("debugEntries")="" Then
    i = 0
Else  
    i = CInt(Session("debugEntries"))
End If
i = i + 1
于 2013-05-19T07:27:51.597 回答
1

会话“数字”实际上是字符串。如果你想要一个整数使用:

i = CInt(Session("debugEntries"))
于 2013-05-17T18:59:55.937 回答