AJAX常规错误处理

时间:2014-08-26 04:01:30

标签: javascript jquery ajax spring-mvc

我目前正在开发一个现有系统,其中我必须为整个系统创建一般错误处理。该系统使用的是Spring MVC和AJAX。

现在我已经完成了正常请求的错误处理(不使用ajax) 但是我遇到了AJAX部分的问题。在AJAX部分中,如果存在错误/异常,则页面不会重定向到我创建的通用错误页面。它停留在同一个屏幕上,没有任何反应。

我已经完成了对此的研究,似乎对于AJAX部分,我需要通过jQuery重定向来完成。

由于我正在使用现有系统,因此我希望尽量减少要进行的更改。所以我的问题是: 是否可以创建一个AJAX部分可以自动调用的通用方法,而无需在AJAX调用的'error:'部分添加额外的代码?

任何建议都会很乐意接受。 :d

2 个答案:

答案 0 :(得分:1)

您可以注册ajaxError个活动。这是jQuery的documentation

代码示例:

$( document ).ajaxError(function() {
  //do your redirect(s) here
});

JSFiddle example

请注意,我想简单地显示使用它的要点,但您也可以获取哪个jqXHR对象引发错误/重新路由,具体取决于它是哪一个。

答案 1 :(得分:0)

在这里查看generic error handling

从我的应用程序中查看以下工作示例。

我的 ExceptionController

 @ExceptionHandler(Exception.class)
    public ModelAndView getExceptionPage(Exception e, HttpServletRequest request) {
        BaseLoggers.exceptionLogger.error("Exception in Controller", e);

        if (isAjax(request)) {

            ModelAndView model = new ModelAndView("forward:/app/webExceptionHandler/ajaxErrorRedirectPage");
            request.setAttribute("errorMessageObject", e.toString());
            return model;

        } else {

            ModelAndView model = new ModelAndView("forward:/app/webExceptionHandler/nonAjaxErrorRedirectPage");
            request.setAttribute("errorMessageObject", e.toString());
            request.setAttribute("errorViewName", "error");
            return model;

        }

    }

// AnotherController 转发请求的地方。

    // this mapping is responsible for rendering view for all exceptions in nonAjax calls.
    @RequestMapping(value = "/nonAjaxErrorRedirectPage")
    public String nonAjaxErrorRedirectPage(HttpServletRequest request, Model model) {

        Locale loc = RequestContextUtils.getLocale(request);
        String nonAjaxErrorMsg = messageSource.getMessage("label.error.msg.nonAjaxCalls", null, loc);
        model.addAttribute("errorMessage", nonAjaxErrorMsg);
        String errorViewName = (String) request.getAttribute("errorViewName");
        return errorViewName;
    }

    // this mapping is responsible for sending error message with suitable error code for all exceptions in Ajax calls.
    @RequestMapping(value = "/ajaxErrorRedirectPage")
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public String ajaxErrorRedirectPage(HttpServletRequest request, Model model) {
        Locale loc = RequestContextUtils.getLocale(request);
        String ajaxErrorMsg = messageSource.getMessage("label.error.msg.ajaxCalls", null, loc);
        return ajaxErrorMsg;
    }