gpt4 book ai didi

javascript - jQuery aJax 错误处理程序将哪些 HTTP 响应代码视为 'error' ?

转载 作者:搜寻专家 更新时间:2023-11-01 05:03:48 24 4
gpt4 key购买 nike

我有一个标准的 aJax 回调到服务器:

$.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json',
url: '/Apps/ResetDateAndCount',
data: JSON.stringify({
appName: app
}),
success: function (response) {
$('.lastReset').text(response);
$('.currentCount').text('0');
},
error: function (xhr, status, error) {
alert("You are not authorized to perform that action");
}
});

从我的服务器 (ASP.NET) 我返回如下错误:

return Json(new { success = false, error = "You are not authorized to perform that action" });

Response.StatusCode = 401; return Json(new { success = false, error = "You are not authorized to perform that action" });

Response.StatusCode = 500; return Json(new { success = false, error = "You are not authorized to perform that action" });

错误处理程序内部 error: function (xhr, status, error) 当状态代码设置为 500 时,只有最后一次返回会被捕获为错误.

我想知道 aJax 实际上将哪些响应代码视为“错误”?

最佳答案

在进行 AJAX 调用时,jQuery 将任何超出区间 [200, 299] 且不同于 304 的错误代码视为错误。

现在你当然会问我,这很好很花花公子,但为什么这该死的不被视为错误,毕竟我返回的 401 超出了上述间隔,所以它应该被视为错误:

Response.StatusCode = 401; 
return Json(new { success = false, error = "You are not authorized to perform that action" });

非常简单:因为当您从 ASP.NET MVC 中的 Controller 操作返回 401 状态代码时,框架(更具体地说是 ASP.NET 表单例份验证模块)将拦截此请求并最终将您重定向到登录表单导致 200 状态代码。是的,登录页面提供了 200 OK 状态代码。在本例中,200 位于间隔内,因此不会调用任何 error 回调。您可以通过检查针对此特定情况的 success 回调中返回的登录页面的 DOM 来验证这一点。

现在将自己置于发出 AJAX 请求的浏览器的视角:它将遵循服务器所做的所有重定向,直到到达最终目的地。如果此最终目标状态代码在间隔之外并且不同于 304,那么您将调用 error 回调。好的,现在事情开始变得更有意义了。

所以您要问我的下一个问题是,如果我从我的 Controller 操作返回 401 状态代码,我该如何调用错误回调,对吧?然后我会将您 (:-)) 重定向到以下博客文章:Prevent Forms Authentication Login Page Redirect When You Don't Want It .

关于javascript - jQuery aJax 错误处理程序将哪些 HTTP 响应代码视为 'error' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41577823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com