2

Classic ASP のセッション変数で問題が発生しています。次のコードの 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 関連コードです。
<!-- #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 がページ ファイルに含まれています。このファイルをブラウザーで開くと、型の不一致エラーが返されます。

あなたが私を助けてくれることを願っています、私はすでにすべてを試したと本当に思います. ブードゥー、黒魔術、およびその類を除いて。ありがとう!

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 に答える