Получить объект xhr в vb.net, когда вызов ajax не удался - PullRequest
1 голос
/ 03 сентября 2010

У меня большая проблема при jQuery.ajax звонке.Я звоню в веб-службу всякий раз, когда нажимаю кнопку обновления.У меня есть отдельный класс веб-службы, в котором состоит из нескольких методов.Когда я вызываю метод веб-службы, я выполняю обработку ошибок и записываю информацию об ошибках в db, после чего мне приходится переопределять «ex», что означает объект ошибки, на XMLHttpRequest.Можно ли присвоить SqlException объекту ajax (xhr) в VB.NET?Пожалуйста, помогите мне, это намного более полезно для меня.

1 Ответ

0 голосов
/ 05 сентября 2010

Да, это возможно!Я пытаюсь описать это в VB.NET (в основном я использую C #, но надеюсь, что не буду делать синтаксические ошибки).Допустим, у нас есть веб-сервис

<WebMethod()> _
<ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True)> _
Public Function GetData(ByVal Age As Integer) As String
If Age <= 0 Then
    Throw(New ArgumentException("The parameter age must be positive."))
End If
'... some code
End Function

Тот же код в C # выглядит как

[WebMethod]
[ScriptMethod (UseHttpGet=true)]
public string GetData(int age)
{
    if (age <= 0)
        throw new ArgumentException("The parameter age must be positive.");
    // some code
}

В случае ввода отрицательного возраста будет выдано исключение ArgumentException (все, что яобъяснение остается прежним для другого исключения, например SqlException).

Теперь у вас есть код JavaScript, который использует jQuery.ajax для вызова службы.Затем вы можете расширить код для поддержки обработки исключений следующим образом:

$.ajax({
    type: "GET",
    url: "MyWebService.asmx/GetData",
    data: {age: -5},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data, textStatus, xhr) {
        // use the data
    },
    error: function(xhr, textStatus, ex) {
        var response = xhr.responseText;
        if (response.length > 11 && response.substr(0, 11) === '{"Message":' &&
            response.charAt(response.length-1) === '}') {

            var exInfo = JSON.parse(response);
            var text = "Message=" + exInfo.Message + "\r\n" +
                       "Exception: " + exInfo.ExceptionType;
                      // + exInfo.StackTrace;
            alert(text);
        } else {
            alert("error");
        }
    }
});

В случае возникновения исключения мы получаем информацию об ошибке в формате JSON.Мы десериализовываем его для объекта, имеющего свойства Message, ExceptionType и StackTrace, а затем отображаем сообщение об ошибке, подобное следующему

Message: The parameter age must be positive.
Exception: System.ArgumentException

В реальном приложении вы, вероятно, никогда не отобразите значение StackTrace имущество.Наиболее важная информация содержится в Message: текст исключения и в ExceptionType: название исключения (например, System.ArgumentException или System.Data.SqlClient.SqlException).

...