12

に戻るには、カスタム例外で余分なプロパティを追加します。私は、エラーは次のように私のカスタムタイプであると判断しています私の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

私はあなたが望むコードをキャッチしようと勧めます。あなたの例外に当たったら、その例外をBLL/DALからあなたのプレゼンテーション層に投げてください。プレゼンテーションレイヤーで、例外から変換される新しい例外タイプを返す方法を提供します。例はtry catch(特別な例外){return new {.SpecialMessage = "IamError"、。IsError = True}です。あなたのAjaxで、IsErrorをチェックしてください。 – Programmer

答えて

3

例外クラスはシリアライズ可能ですが、IDictionaryを含み、ISerializableを実装しています。カスタムの例外クラスをシリアライズするためにはもう少し作業が必要です。

これに対処する簡単な方法は、そのような例外クラスのDataコレクションを活用することである。これを行うには

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

もう一つの方法は、あなたの派生クラスも含まISerializableインタフェースを実装確保することですシリアライゼーションコンストラクタを提供し、GetObjectData()をオーバーライドします。このアプローチのベースラインとして、other answer(C#)を参照してください。

関連する問題