VBScript / Classic ASP - 如何在不抛出错误的情况下检查对象中是否存在属性

时间:2012-04-16 01:57:02

标签: asp-classic

示例代码:

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 Classic中,如何在不抛出错误的情况下检测对象中是否存在属性?

3 个答案:

答案 0 :(得分:16)

经典ASP的一个好处是它允许您在同一页面中运行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之前编译,因此可以访问它。

答案 1 :(得分: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   

答案 2 :(得分:2)

假设您正在包含一些为您提供JSON解析器的runat =“server”js文件,那么JSON.parse将返回一个Javascript对象。

如果上述假设是正确的,则以下情况应该起作用:

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