Javascript jQuery解析从控制器返回的JSON结果

Javascript jQuery解析从控制器返回的JSON结果,javascript,jquery,json,asp.net-mvc-3,Javascript,Jquery,Json,Asp.net Mvc 3,我想解析从控制器方法或自定义异常过滤器返回的包含状态或错误消息的JSON结果,并显示这些消息 $.ajax({ url: "/Account/LogOn", type: "POST", dataType: "json", data: form.serialize(), success: function (result) { alert(result); }

我想解析从控制器方法或自定义异常过滤器返回的包含状态或错误消息的JSON结果,并显示这些消息

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

我认为有了这段代码,我可以为一个特定的操作结果或方法实现它。对于返回到页面的每个JSON结果,有没有办法做到这一点?

没有,对于控制器操作返回的每个可能的JSON,没有办法做到这一点,因为结构将不同,并且此
结果
变量的属性将不同

$.ajax({
    url: "/Account/LogOn",
    type: "POST",
    dataType: "json",
    data: form.serialize(),
    success: function (result) {
        alert(result);     
    }
    error: function (req, status, error) {
        //your logic
    }
});
正确的方法是使用一个自定义错误处理程序,它将截获所有异常并将它们包装在定义良好的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);
});

如何抛出异常?我尝试了[HttpPost][AjaxErrorHandler]公共操作结果登录(LogOnModel模型,string returnUrl){//(blabla)抛出新异常(“blabla”);}时的一些代码,但没有成功。我尝试了使用Ajax.BeginForm而不是Html.BeginForm。异常通过AjaxErrorHandler处理,但客户端上的全局Ajax错误处理程序不显示该消息。