11

サンプルコード:

Dim myObject
Set myObject = JSON.parse(someJsonResponseFromTheServer)    

myFunction(myObject.someProperty)

問題:

これに類似したコードをアプリケーションで500実行すると、サーバーから「オブジェクトはプロパティまたはメソッド'someProperty'をサポートしていません」のようなメッセージでエラーがスローされます。この問題を解決するために実行したいのは次のようなものです。

Dim myObject
Set myObject = JSON.parse(someJsonResponseFromTheServer)    

If myObject.someProperty Then
    myFunction(myObject.someProperty)
End If

ただし、条件付きを追加すると、メソッド呼び出しの行ではなく、条件付きの行に同じエラーがスローされます。

私の質問:

ASPクラシックでは、エラーをスローせずに、オブジェクト内にプロパティが存在するかどうかをどのように検出しますか?

4

3 に答える 3

17

従来のASPの利点の1つは、VBScriptとJScriptの両方を同じページで実行できることです。したがって、両方の機能を使用できます。

まず、このJScriptコードのブロックを既存の.aspファイルに追加します。

<script language="JScript" runat="server">
function CheckProperty(obj, propName) {
    return (typeof obj[propName] != "undefined");
}
</script>

また、VBScriptがページのデフォルト言語であると仮定すると、次のようにVBScriptコード内から呼び出すことができます。

Dim myObject
Set myObject = JSON.parse(someJsonResponseFromTheServer)    
If CheckProperty(myObject, "someProperty") Then
    myFunction(myObject.someProperty)
End If

ジェネリッククラスオブジェクトでテストし、正常に動作します。JScriptは、VBScriptにアクセスできるようになる前にコンパイルされます。

于 2012-04-17T07:12:37.793 に答える
7

悲しいことに、これは通常、「エラー時」ステートメントを意味します。

Private Function TestProperty()
    Dim Success
    Success = False

    On Error Resume Next
        ' set for property here
        Success = (Err.Number = 0)
    On Error Goto 0
    TestProperty = Success
Exit Function   
于 2012-04-16T02:03:08.487 に答える
4

On the assumption that you are including some runat="server" js file that provides you with the JSON parser then JSON.parse is going to return a Javascript object.

If the above assumption is correct then the following ought to work:

If myObject.hasOwnProperty("someProperty") Then 
    myFunction(myObject.someProperty) 
End If 
于 2012-04-16T11:57:00.367 に答える