1

webmethod 内でスローされたすべての例外が jQuery Ajax エラー コールバック関数に直接送られるようにする方法はありますか?

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "MantenimientoNotasCapacidades.aspx/SaveViaWebService",
        data: JSON.stringify(params),
        dataType: "json",
        async: true,
        success: function (data) {               


        },
        error: function (request, status, error) {
            var response = JSON.parse(request.responseText).d;
            var error = JSON.parse(response);
            alert(JSON.parse(request.responseText).error.message);

        }
    });

JSON.parse(request.responseText).Messageを使用することでそのエラーの情報を表示するのに十分であることはわかっていますが、例外が発生するたびにコードがすぐに停止し、押し続ける必要があることがわかりました。 F10 または F5 を押して、最終的にアラートを表示できるようにします。

コードを「try」ブロックで囲むことは既に試みましたが、使用できる Visual Basic アプリケーションで行うように「catch」ブロックで多くのことを行うことができないため、それを行う意味があまりありません。 MsgBox に例外メッセージを表示する 'catch' ブロック。

コードの実行を停止せずに、webmethod でスローされたすべての例外をエラー コールバック関数でキャッチする方法はありますか?

どんな助けでも大歓迎です。

PS 明けましておめでとうございます!!

4

1 に答える 1

1

@cmd.promt のアドバイスに従って、Response.StatusCode を 500 に変更し、スローされた例外の説明を含むオブジェクト ( myError ) を作成しました。あとは、オブジェクトをシリアル化して、 client (ここでは Response..Write("{""message"": ""action failed!""}") を使用しようとしましたが、何らかの理由で常に同じエラーが発生しました: 「JSON.parse:予期しない非-JSONデータの後の空白文字」なので、最終的にはjson.netを使用し、 response.Writeについてはすべて忘れることにしました)

<WebMethod()> _
        Public Shared Function SaveViaWebService(lst As List(Of Students)) As String
          Try

          Catch ex As Exception


                Dim httpResponse = HttpContext.Current.Response
                httpResponse.Clear()
                httpResponse.StatusCode = 500

                'I thought that .StatusDescription would be useful but it turned out it didn't
                'httpResponse.StatusDescription = ex.Message

                Dim myError= New With {.message = ex.Message, .source = ex.Source}
                Return JsonConvert.SerializeObject(myError)

            End Try
        End Function

これで、エラーはエラー コールバックに正しく送信されます。ここで行う必要があるのは、firebugで遊んで、エラーがどのように送信されたかを確認すること だけでした。ここに画像の説明を入力

$.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "MantenimientoNotasCapacidades.aspx/SaveViaWebService",
        data: JSON.stringify(params),
        dataType: "json",
        async: true,
        success: function (data) {               


        },
        error: function (request, status, error) {
            var response = JSON.parse(request.responseText).d;
            var error = JSON.parse(response);
            alert(JSON.parse(request.responseText).error.message);

        }
    });

これまでのところ、プログラムの実行を中断し続ける例外を除いて、すべてが私が望んでいたとおりです。それは彼らの通常の行動ですか?? それらはすべて「catch」ブロックに直接行くはずではありませんか??

于 2013-01-03T17:49:09.363 に答える