JQuery анализирует результаты JSON, возвращаемые из контроллеров - PullRequest
0 голосов
/ 13 марта 2012

Я хочу проанализировать результаты JSON, содержащие сообщения о состоянии или ошибках, возвращенные из метода контроллера или пользовательского фильтра исключений, и отобразить сообщения.

     $.ajax({
        url: "/Account/LogOn",
        type: "POST",
        dataType: "json",
        data: form.serialize(),
        success: function (result) {
            alert(result);     
        }
    });

Я думаю, что с помощью этого кода я могу сделать это для определенного результата действия или метода.Есть ли способ сделать это для каждого результата JSON, возвращаемого на страницу?

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Нет, это невозможно сделать для каждого возможного JSON, возвращаемого вашими действиями контроллера, потому что структура будет другой, а свойства этой переменной result не будут одинаковыми.

Правильноможно было бы иметь собственный обработчик ошибок, который будет перехватывать все исключения и оборачивать их в четко определенную структуру JSON.Затем вы можете использовать функцию обратного вызова с ошибкой в ​​запросе AJAX для обработки этого случая.

public class AjaxErrorHandler : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.Result = new JsonResult
            {
                Data = new
                {
                    ErrorMessage = filterContext.Exception.Message
                },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.Clear();
            filterContext.HttpContext.Response.StatusCode = 500;
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
        }
    }
}

, который может быть зарегистрирован как фильтр глобального действия:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new AjaxErrorHandlerAttribute());
}

и на клиенте вы можететакже есть глобальный обработчик ошибок AJAX для всех запросов AJAX на одной странице:

$(document).ajaxError(function(event, jqXHR, ajaxSettings, thrownError) {
    var json = $.parseJSON(jqXHR.response);
    alert(json.ErrorMessage);
});
0 голосов
/ 13 марта 2012
$.ajax({
    url: "/Account/LogOn",
    type: "POST",
    dataType: "json",
    data: form.serialize(),
    success: function (result) {
        alert(result);     
    }
    error: function (req, status, error) {
        //your logic
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...