2012-04-16 3 views
8

Beispielcode:VBScript/Classic ASP - Wie kann ich überprüfen, ob eine Eigenschaft in einem Objekt liegt ein Fehler ohne Wurf

Dim myObject 
Set myObject = JSON.parse(someJsonResponseFromTheServer)  

myFunction(myObject.someProperty) 

Das Problem:

Wenn Code ähnlich zu diesem ist lief in meiner Anwendung, es wirft einen 500 Fehler vom Server mit einer Nachricht ähnlich wie "Objekt unterstützt keine Eigenschaft oder Methode 'someProperty'. Was ich tun möchte, um dieses Problem zu lösen ist in etwa so:

Dim myObject 
Set myObject = JSON.parse(someJsonResponseFromTheServer)  

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

Wenn ich jedoch die Bedingung hinzufüge, wird derselbe Fehler in der Zeile mit der Bedingung anstelle der Zeile mit dem Methodenaufruf ausgelöst.

Meine Frage:

In ASP Classic Wie erkennen Sie, ob eine Eigenschaft in einem Objekt vorhanden ist, ohne einen Fehler zu werfen?

+0

Native ASP hat keinen JSON-Parser. Was verwenden Sie, um eine JSON-Implementierung in ASP zu bekommen? – AnthonyWJones

+0

@AnthonyWJones, Gute Frage. Da ich dieses Projekt (und meinen Job) gerade erst vor drei Tagen begonnen habe, bin ich mir nicht ganz sicher, wie sie es machen. –

+0

Es gibt zwei JSON für ASP Classic-Implementierungen. Von json.org: [aspjson] (http://code.google.com/p/aspjson/) und [JSON ASP-Dienstprogrammklasse] (http://www.webdevbros.net/2007/04/26/generate- json-from-asp-Datentypen /). Der letzte wird nicht mehr gepflegt. –

Antwort

13

Einer der Vorteile des klassischen ASP ist, dass es Ihnen erlaubt, VBScript und JScript auf der gleichen Seite zu laufen - so Sie können die Kraft von beiden nutzen.

Zuerst fügen Sie diesen Block von JScript-Code in Ihre bestehende .asp Datei:

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

und VBScript unter der Annahme, ist die Standardsprache in der Seite, können Sie es aus Ihrem VBScript-Code wie folgt aufrufen:

Getestet mit generischen Klassenobjekt und es funktioniert gut - das JScript wird vor dem VBScript kompiliert, damit es zugänglich ist.

+0

Seien Sie vorsichtig, wenn Sie JavaScript und VBScript kombinieren. Schauen Sie sich [this] (http://stackoverflow.com/questions/10083632/call-a-function-written-on-vb-from-a-jscript-code-classic-asp) SO-Thread für einige sehr wichtig an Dinge zu beachten. –

+0

@Guido Solange VBScript der Standard ist, sollte es gut funktionieren: "Die Skripte, die nicht der Standardsprache entsprechen, werden zuerst analysiert und ausgeführt ...Zu dem Zeitpunkt, zu dem das Standardspracheskript geparst und ausgeführt wird, wurden alle globalen Identifikatoren, die von den vorherigen Sprachskripten erstellt wurden, der Skriptumgebung hinzugefügt und stehen daher zur Verwendung mit Inline-Code zur Verfügung. ** " –

+0

Schattenassistent, danke Ich werde Levi auf mögliche Probleme hinweisen, wenn ich die beiden miteinander kombiniere. –

6

Leider bedeutet dies normalerweise eine 'Fehler' Aussage.

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

Unter der Annahme, dass Sie einige runat = „server“ js-Datei enthält, die Sie mit der JSON-Parser liefert dann ein Javascript-Objekt zurückgeben JSON.parse wird.

Wenn die obige Annahme richtig ist dann folgendes funktionieren sollte:

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