#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:(. Спасибо!