簡體   English   中英

jQuery解析從控制器返回的JSON結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM