Как вернуться к функции ошибки AJAX из application_error?

#jquery #ajax #asp.net-mvc #asp.net-mvc-5

#jquery #ajax #asp.net-mvc #asp.net-mvc-5

Вопрос:

Мой приведенный ниже код попадает в функцию AJAX success . Почему? Он должен выполнить error функцию. Что я делаю не так?

 $.ajax({
    url: url,
    type: "POST",
    data: data,
    contentType: "application/json; charset=utf-8",
    success: function(data) {
        if (callback)
            callback(data);

        $.LoadingOverlay("hide");
    },
    error: function (event, jqxhr, settings, thrownError) {
        var t = "";

    }
});
 
 protected void Application_Error(object sender, EventArgs e)
{
    var ctx = HttpContext.Current;

    var exception = ctx.Server.GetLastError();

    bool isAjaxCall = string.Equals("XMLHttpRequest", Context.Request.Headers["x-requested-with"], StringComparison.OrdinalIgnoreCase);
    Context.ClearError();
    if (isAjaxCall)
    {
        //Context.Response.ContentType = "application/json";
        Context.Response.StatusCode = 200;
        Context.Response.Write(
            new JavaScriptSerializer().Serialize(
                new { error = exception.Message }
            )
        );
    }
}
 

Контроллер просто выдает исключение:

 throw new Exception("faulty");
 

Ответ №1:

error Обработчик $.ajax выполняется при HttpStatusCode получении чего-либо, кроме 2xx . Имея это в виду, вы могли бы вернуть a 500 Internal Server Error , например:

 protected void Application_Error(object sender, EventArgs e)
{
    var ctx = HttpContext.Current;
    var exception = ctx.Server.GetLastError();
    bool isAjaxCall = string.Equals("XMLHttpRequest", Context.Request.Headers["x-requested-with"], StringComparison.OrdinalIgnoreCase);
    Context.ClearError();

    if (isAjaxCall)
    {
        Context.Response.StatusCode = 500; // note the change here
        Context.Response.Write(new JavaScriptSerializer().Serialize(new { error = exception.Message }));
    }
}
 

Комментарии:

1. При копировании кода из других я не заметил 200 statuscode:(. Спасибо!