Как перехватить ошибку Ajax при использовании вкладок пользовательского интерфейса Jquery вместе с обработчиком пользовательских ошибок

Я использую вкладки пользовательского интерфейса Jquery в своем веб-приложении asp.net mvc. У меня вкладки работают хорошо.

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

Я использую обработчик CustomError вместо атрибута MVC HandleError следующим образом:

public class CustomHandleErrorAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
            {
                return;
            }

            if (new HttpException(null, filterContext.Exception).GetHttpCode() != 500)
            {
                return;
            }

            if (!ExceptionType.IsInstanceOfType(filterContext.Exception))
            {
                return;
            }

            // if the request is AJAX return JSON else view.
            if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
            {
                filterContext.Result = new JsonResult
                {
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                    Data = new
                    {
                        error = true,
                        message = filterContext.Exception.Message
                    }
                };
            }
            else
            {
                var controllerName = (string)filterContext.RouteData.Values["controller"];
                var actionName = (string)filterContext.RouteData.Values["action"];
                var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

                filterContext.Result = new ViewResult
                {
                    ViewName = View,
                    MasterName = Master,
                    ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
                    TempData = filterContext.Controller.TempData
                };
            }
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.Clear();
            filterContext.HttpContext.Response.StatusCode = 500;
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
        }
    }

Итак, если возникает ошибка, и это запрос ajax, то вышеуказанный метод выдаст ответ JSON.

Но я изо всех сил пытаюсь понять, как поймать этот ответ JSON и показать его на стороне клиента.

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

 $(document).ready(function () {
            $('#tabs').tabs({
                activate: function (event, ui) {
                    ui.oldPanel.empty();
                },
                ajaxOptions: { success: Success, error: Failure }
            });
            $('#tabs').css('display', 'block');
            $(function () {
                $(this).ajaxStart(function () {
                    $("#ajaxLoading").show();
                });
                $(this).ajaxStop(function () {
                    $("#ajaxLoading").hide();
                });
            });
        });

        function Success(data) {
            alert("Successfully loaded the tabs");
        }

        function Failure() {
            alert("Some thing wrong had happened");
        }

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


person Sai Avinash    schedule 18.11.2013    source источник


Ответы (1)


Я нашел решение следующим образом:

$.ajaxSetup({
    type: "GET",
    cache: false,
    error: function (e) {
        var Error = e.responseText;
        var ErrorCode= xx;
        alert("Sorry, An Error has been occured while processing your request " + Error);
    }
});

Я использовал ajaxSetup() для получения ответа со стороны сервера.

Надеюсь это поможет...

person Sai Avinash    schedule 18.11.2013