2012-04-16 25 views
8

Sample Code:VBScript/ASP Classic - Làm thế nào để kiểm tra xem một tài sản Tồn tại ở An Object Không Ném một Lỗi

Dim myObject 
Set myObject = JSON.parse(someJsonResponseFromTheServer)  

myFunction(myObject.someProperty) 

Vấn đề:

Khi mã tương tự như đây là chạy trong ứng dụng của tôi, nó ném một lỗi 500 từ máy chủ với một thông báo tương tự như "Đối tượng Không hỗ trợ tài sản hoặc phương pháp 'someProperty'. Những gì tôi muốn làm để giải quyết vấn đề này là một cái gì đó như thế này:

Dim myObject 
Set myObject = JSON.parse(someJsonResponseFromTheServer)  

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

Tuy nhiên, nếu tôi thêm điều kiện, nó sẽ ném cùng một lỗi trên dòng với điều kiện thay vì dòng có lệnh gọi phương thức.

Câu hỏi của tôi:

Trong ASP Classic, làm thế nào để bạn phát hiện nếu một tài sản tồn tại trong một đối tượng mà không cần ném một lỗi?

+0

Natively ASP không có trình phân tích cú pháp json. Bạn đang sử dụng gì để thực hiện JSON vào ASP? – AnthonyWJones

+0

@AnthonyWJones, Câu hỏi hay. Cho rằng tôi mới bắt đầu dự án này (và công việc) như 3 ngày trước, tôi không hoàn toàn chắc chắn họ đang làm như thế nào. –

+0

Có hai JSON cho việc triển khai ASP Classic. Từ json.org: [aspjson] (http://code.google.com/p/aspjson/) và [lớp tiện ích JSON ASP] (http://www.webdevbros.net/2007/04/26/generate- json-from-asp-datatypes /). Người cuối cùng không còn được duy trì nữa. –

Trả lời

13

Một trong những lợi ích của cổ điển ASP là nó cho phép bạn chạy cả hai VBScript và JScript trong cùng một trang - do đó bạn có thể sử dụng sức mạnh của cả hai.

Đầu tiên, thêm khối mã này JScript để .asp tập tin hiện tại của bạn:

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

Và giả sử VBScript là ngôn ngữ mặc định trong trang, bạn có thể gọi nó từ bên trong mã VBScript của bạn như thế này:

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

Đã thử nghiệm nó với đối tượng lớp chung và nó hoạt động tốt - JScript được biên dịch trước khi VBScript có thể truy cập được.

+0

Hãy cẩn thận, kết hợp JavaScript và VBScript. Hãy xem [this] (http://stackoverflow.com/questions/10083632/call-a-function-written-on-vb-from-a-jscript-code-classic-asp) SO thread cho một số rất quan trọng những điều cần lưu ý. –

+0

@Guido miễn là VBScript là mặc định, nó sẽ hoạt động tốt: "Các tập lệnh ngôn ngữ không mặc định được phân tích cú pháp và được thực hiện trước ...Khi tập lệnh ngôn ngữ mặc định được phân tích cú pháp và thực hiện tất cả các mã định danh toàn cầu được tạo bởi các tập lệnh ngôn ngữ trước ** sẽ được thêm vào môi trường tập lệnh và do đó có sẵn để sử dụng từ mã nội tuyến ** " –

+0

Shadow Wizard, cảm ơn, điều này Tôi muốn chỉ Levi về các vấn đề có thể xảy ra khi kết hợp cả hai. –

6

Đáng buồn thay, điều này thường có nghĩa là tuyên bố 'về lỗi'.

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

Trên giả định rằng bạn đã bao gồm một số runat = "server" js tập tin đó cung cấp cho bạn với các phân tích cú pháp JSON sau đó JSON.parse sẽ trả về một đối tượng Javascript.

Nếu giả thiết trên là đúng thì những điều sau đây nên làm việc:

If myObject.hasOwnProperty("someProperty") Then 
    myFunction(myObject.someProperty) 
End If 
Các vấn đề liên quan