[英]jQuery parsing JSON results returned from controllers
我想解析包含狀態或錯誤消息的JSON結果,從控制器方法或自定義異常過濾器返回並顯示消息。
$.ajax({
url: "/Account/LogOn",
type: "POST",
dataType: "json",
data: form.serialize(),
success: function (result) {
alert(result);
}
});
我認為使用此代碼我可以針對特定的Action Result或方法執行此操作。 有沒有辦法為返回到頁面的每個JSON結果執行此操作?
不,對於控制器操作返回的每個可能的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);
});
$.ajax({
url: "/Account/LogOn",
type: "POST",
dataType: "json",
data: form.serialize(),
success: function (result) {
alert(result);
}
error: function (req, status, error) {
//your logic
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.