12

पर लौटने के लिए मैं एक कस्टम अपवाद वर्ग के रूप में निम्नानुसार है:कस्टम अपवाद में अतिरिक्त गुण जोड़ें AJAX समारोह

<Serializable> 
Public Class SamException 
    Inherits Exception 
    Public Sub New() 
     ' Add other code for custom properties here. 
    End Sub 
    Public Property OfferBugSend As Boolean = True 

    Public Sub New(ByVal message As String) 
     MyBase.New(message) 
     ' Add other code for custom properties here. 
    End Sub 

    Public Sub New(ByVal message As String, ByVal inner As Exception) 
     MyBase.New(message, inner) 
     ' Add other code for custom properties here. 
    End Sub 

End Class 

मैं AJAX प्रतिक्रियाओं से रिटर्न में कुछ मामलों के लिए यह उपयोग कर रहा हूँ।

मेरी AJAX प्रतिक्रिया की त्रुटि समारोह में मैं कर रहा हूँ कि निर्धारित करने त्रुटि इस तरह अपने कस्टम प्रकार का है:

.... 
ajax code.... 
.error = function (xhr, text, message) { 
    var parsed = JSON.parse(xhr.responseText); 
    var isSamCustomError = (parsed.ExceptionType).toLowerCase().indexOf('samexception') >= 0; 
.... etc.... 

यह मैं वापस ग्राहक के लिए एक विशिष्ट प्रतिक्रिया पोस्ट करने अगर त्रुटि के है की अनुमति देता है मेरा कस्टम प्रकार

लेकिन ... मुझे इस मामले को अलग-अलग संभालने के लिए AJAX कोड के लिए अतिरिक्त संपत्ति OfferBugSend को क्लाइंट में पोस्ट करने के लिए प्रतीत नहीं होता है।

console.log("OfferBugSend: " + parsed.OfferBugSend) 

अपरिभाषित दिखाई दे रहा है, और अगर मैं प्रतिक्रिया की जाँच करें, इस वजह से xhr.responseText केवल गुण शामिल हैं:

ExceptionType 
Message 
StackTrace 

इन गुणों आधार वर्ग Exception से हैं, लेकिन यह अपने कस्टम वर्ग गुजर नहीं है गुण ...

मैं यह कैसे कर सकता हूं?

+1

कृपया एक कोड उदाहरण संलग्न करें कि आप अपना AJAX कैसे सबमिट करते हैं और अपना 'SamException' फेंक देते हैं। – codeDom

+0

मैं आपको इच्छित कोड को पकड़ने की सलाह दूंगा। यदि आप अपना अपवाद दबाते हैं, तो उस अपवाद को बीएलएल/डीएएल से अपनी प्रस्तुति परत में फेंक दें। अपनी प्रस्तुति परत में, नया अपवाद प्रकार वापस करने का एक तरीका प्रदान करें जो आपके अपवाद से परिवर्तित हो जाएगा। उदाहरण है, पकड़ने का प्रयास करें (विशेष अपवाद) {नया वापस लौटें {.SpecialMessage = "IamError", IsError = True}। अपने अजाक्स में, IsError की जांच करें। – Programmer

उत्तर

3

अपवाद वर्ग क्रमबद्ध है, लेकिन इसमें एक आईडीकी है और आईएसरियलज़ेबल लागू करता है, जिसके लिए आपकी कस्टम अपवाद कक्षा को क्रमबद्ध करने के लिए थोड़ा और काम की आवश्यकता होती है।

Public Property OfferBugSend As Boolean 
    Get 
     Return Data("OfferBugSend") 
    End Get 
    Set(value As Boolean) 
     Data("OfferBugSend") = value 
    End Set 
End Property 

एक और तरीका यह सुनिश्चित करने के लिए अपने व्युत्पन्न वर्ग भी ISerializable इंटरफ़ेस है, जो शामिल है को लागू करता है क्या करने के लिए:

इस से निपटने के लिए आसान तरीका है तो जैसे अपवाद वर्ग के Data संग्रह का लाभ उठाकर है एक serialization कन्स्ट्रक्टर प्रदान करना और GetObjectData() को ओवरराइड करना। उस दृष्टिकोण के लिए आधार रेखा के रूप में यह other answer (सी # में) देखें।

संबंधित मुद्दे