当任何异步调用encouter异常时,如何将用户重定向到自定义错误页面

时间:2012-06-12 13:50:19

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 datatables

我正在研究asp mvc,其中我有jquery数据表和一些图表元素,我通过ajax调用获取所有项目。

现在我需要重定向用户,如果任何ajax(数据表json数据和图表图表)调用遇到异常。 现在我正在使用datatable的错误回调,它给我在发生异常时生成所需的html,但同时与datatable一起发送7个jquery调用,其输出依赖于datatable的结果,所以这7个调用陷阱在无限循环中。现在如果我的datatble函数遇到错误,我该如何在服务器端停止这个处理。

提前致谢。

3 个答案:

答案 0 :(得分:4)

处理jQuery Ajax的错误事件&做任何你想做的事情。

$.ajax(
      {
          success: function (result) {

              });
          },
          error: function (x, e) {
           //Write you code here
              alert(x.readyState + " " + x.status + " " + e.msg);
          }
      });

答案 1 :(得分:1)

我在我的MVC3项目中使用aspx页面做了:

<customErrors mode="RemoteOnly" defaultRedirect="Error.aspx">
</customErrors>

希望这有帮助

答案 2 :(得分:1)

AJAX错误处理中,您应该始终关注双方:服务器端和客户端。你需要决定每一方面会发生什么。

Kapil Khandelwalanswer非常棒,但它只涵盖了客户端。

我也鼓励您阅读此问答:ASP.NET MVC Ajax Error handling

定义一个通用或特定的错误处理程序并装饰返回JsonResult或响应任何类型的AJAX调用的方法总是很有用。类似的东西:

public class JsonErrorHandler : ActionFilterAttribute 
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest() && filterContext.Exception != null)
        {
            // Log the Error
            // Do necessary things...

            filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;

            filterContext.Result = new JsonResult()
            {
                //JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                Data = new
                {
                    filterContext.Exception.Message,
                    filterContext.Exception.StackTrace
                }
            };

            filterContext.ExceptionHandled = true;
        }
    }
}

然后你就像使用它一样:

[JsonErrorHandler]
public JsonResult GetMyData(...)
{
    .
    .
    .
}