2009-04-28 21 views
1

エラーハンドラでjQuery ajaxを使用していて、呼び出すASP.NET MVCアクションで例外がスローされた場合、その例外をユーザーに表示することができます。今私が使用しています:失敗したjQueryリクエストから例外メッセージを取得するにはどうすればよいですか?

$.ajax({ 
    ... 
    error: function(request,status,error) { 
     var exp = new RegExp('<title>(.*)<\/title>','i'); 
     if (exp.exec(request.responseText)) { 
      alert(RegExp.lastParen); 
     } 
     else { 
      alert(status); 
     } 
    } 
}); 

私は標準的なjQueryの実装を期待してではなく、私自身の圧延しています。

答えて

3

私は通常、JsonResultをtry/catchブロックにラップして例外をスローすることができないアクションを持っています。代わりに、 "ok"(true/false)と "message"(エラーがあればユーザーに表示するメッセージを含む)のJson配列ごとに2つのパラメータを返します。

次に、$ .ajax "error"パラメータを省略し、JsonResult結果の "ok"パラメータで単純な分岐を実行します。

+0

+1私はこれも考えましたが、それは「成功」の意味を再定義していますか? – tvanfosson

+0

私も似たようなことをしています。私は自分のロギングを行い、どのようにして何がユーザーに表示されるかを何らかの形で制御できると感じています。 –

1

アイデアが必要な場合は何も間違っていません...リクエストにapplication/jsonヘッダーがある場合、エラーをJSONとしてシリアル化するカスタムエラーページはどうですか?

+0

例外を実際にキャッチして消費することなくこれを行う方法を考えることができますか?私の場合、これらは本当に例外的な条件なので、ログに記録されるようにバブルアップしたいと思います。 – tvanfosson

+0

あなたのアプリのロギング設定はわかりませんが、Global.asaxでApplication_Errorハンドラを設定することができます... catch(Exception ex){if(json header){jsonエラーを書き出す} else {throw; } ...またはLog(例);再スローしないでください(またはダブルエラーが発生するかもしれません)が、エラーログの設定がわからない –

+0

まだありませんが、ELMAHを使用する予定です。 – tvanfosson

0

をお探しですか 5行のコードよりも簡単ですか?本当に?

行1、エラーを解析します。これはあなたのサーバーのカスタムですので、jQueryの一般的な機能がどのように役立つかはわかりません。

行2〜5は、解析に基づいて異なるエラーを示します。繰り返しますが、これはサーバーのカスタムです。

ここでは個人的には匿名関数(alertUserなどと呼んでいます)を使用しませんが、このアプローチには何も問題はありません。

+0

jQueryが例外のテキストを既に隠していた場所を誰かが知っていて、私はそれを見逃してしまったと思っていました。 – tvanfosson

+0

実際には、jQueryが私のためにそれを見つけて、エラーパラメータにテキストを埋め込むのはうれしいですが、それはクライアント側のエラーにしか使われていないかのように見えます。 – tvanfosson

関連する問題