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

4

3 回答 3

17

经典 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 之前编译,因此可以访问它。

于 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

假设您包含一些 runat="server" js 文件,该文件为您提供 JSON 解析器,然后JSON.parse将返回一个 Javascript 对象。

如果上述假设是正确的,那么以下应该起作用:

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