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”块中做很多事情'catch' 块以在 MsgBox 中显示异常消息。

有什么方法可以在错误回调函数中捕获 web 方法中抛出的所有异常,但不会停止代码的执行?

任何帮助将非常感激。

PS新年快乐!!

4

1 回答 1

1

根据@cmd.promt 的建议,我将 Response.StatusCode 更改为 500 并创建了包含所引发异常的描述的对象(myError),然后唯一要做的就是序列化对象并将其发送回客户端(在这里我尝试使用 Response..Write("{""message"": ""action failed!""}") 但由于某种原因,我总是最终得到相同的错误:“JSON.parse: unexpected non -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

这样,错误就会正确发送到错误回调,我唯一要做的就是玩萤火虫并查看错误是如何发送的 在此处输入图像描述

$.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 回答