我想解析包含状态或错误消息的JSON结果,从控制器方法或自定义异常过滤器返回并显示消息。
$.ajax({
url: "/Account/LogOn",
type: "POST",
dataType: "json",
data: form.serialize(),
success: function (result) {
alert(result);
}
});
我认为使用此代码我可以针对特定的Action Result或方法执行此操作。有没有办法为返回页面的每个JSON结果执行此操作?
答案 0 :(得分:2)
不,对于控制器操作返回的每个可能的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);
});
答案 1 :(得分:0)
$.ajax({
url: "/Account/LogOn",
type: "POST",
dataType: "json",
data: form.serialize(),
success: function (result) {
alert(result);
}
error: function (req, status, error) {
//your logic
}
});