2012-04-16 19 views
8

Código de ejemplo:VBScript/ASP clásico - ¿Cómo averiguar si una propiedad existe en un objeto sin emitir un error

Dim myObject 
Set myObject = JSON.parse(someJsonResponseFromTheServer)  

myFunction(myObject.someProperty) 

El problema:

Cuando el código similar a este es ejecutado en mi aplicación, arroja un error 500 desde el servidor con un mensaje similar a "Objeto no admite la propiedad o el método 'alguna propiedad'. Lo que me gustaría hacer para resolver este problema es algo como esto:

Sin embargo, si agrego el condicional, arroja el mismo error en la línea con el condicional en lugar de la línea con la llamada al método.

Mi Pregunta:

En ASP clásico, ¿Cómo se detecta si existe una propiedad dentro de un objeto sin lanzar un error?

+0

Nativamente ASP no tiene un analizador json. ¿Qué estás usando para obtener una implementación JSON en ASP? – AnthonyWJones

+0

@AnthonyWJones, Buena pregunta. Dado que acabo de comenzar este proyecto (y mi trabajo) hace 3 días, no estoy muy seguro de cómo lo están haciendo. –

+0

Hay dos implementaciones JSON para ASP Classic. De json.org: [aspjson] (http://code.google.com/p/aspjson/) y [Clase de utilidad JSON ASP] (http://www.webdevbros.net/2007/04/26/generate- json-from-asp-datatypes /). El último ya no se mantiene. –

Respuesta

13

Uno de los beneficios de la ASP clásico es que le permite ejecutar VBScript y JScript en la misma página - por lo tanto puedes usar el poder de ambos.

En primer lugar, añadir este bloque de código JScript a su .asp archivo existente:

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

Y suponiendo VBScript es el idioma por defecto en la página, se le puede llamar desde el código VBScript siguiente manera:

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

Lo probó con un objeto de clase genérico y funciona bien: el JScript se compila antes de poder acceder al VBScript.

+0

Sin embargo, tenga cuidado al combinar JavaScript y VBScript. Eche un vistazo a [this] (http://stackoverflow.com/questions/10083632/call-a-function-written-on-vb-from-a-jscript-code-classic-asp) SO thread para algunos muy importantes cosas para tener en cuenta. –

+0

@Guido, siempre que VBScript sea el predeterminado, debería funcionar bien: "Los scripts de lenguaje no predeterminados se analizan y se ejecutan primero ...En el momento en que se analiza y ejecuta la secuencia de comandos de idioma predeterminada, todos los identificadores globales creados por las secuencias de comandos de idiomas anteriores ** se agregaron al entorno de secuencia de comandos y, por lo tanto, están disponibles para su uso desde código en línea ** " –

+0

Shadow Wizard, gracias, esto de hecho funcionará perfecto. Quería señalarle a Levi sobre posibles problemas al combinar los dos. –

6

Lamentablemente, esto generalmente significa una declaración de 'error'.

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

En el supuesto de que va a incluir algún archivo runat = "server" js que le proporciona el analizador JSON a continuación JSON.parse va a devolver un objeto Javascript.

Si la suposición es correcta, entonces el siguiente se debe trabajar;

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