何时出现错误:或成功:在 Ajax 请求中调用的处理程序

Posted

技术标签:

【中文标题】何时出现错误:或成功:在 Ajax 请求中调用的处理程序【英文标题】:When are the error: or success: handlers called in Ajax request 【发布时间】:2021-01-27 15:49:15 【问题描述】:

我有一个代码,其中 if 条件失败。在这种情况下,我希望触发 Ajax 的 error: 部分。但是每次都调用 Ajax 的success:。这是一个代码,可以帮助您理解我想问的问题。

Ajax 请求调用

success: function (response)
//some code 
,

error: function (response)
//some code
,

在我的后端代码中

if(condition )
//some code
return response()->json([
   'success'=>true,
   'message'=>"Success: handler in Ajax should be triggered"

]);
else
//some code
return response()->json([
   'success'=>false,
// OR 'error'=>true,
   'message'=>"Error: handler in Ajax should be triggered"

]);

但是,即使condition 得到false,Ajax 中的success: 仍然被触发。它没有进入error: 部分。我不明白。有人可以解释发生了什么吗?

【问题讨论】:

Ajax 对您的success property 一无所知 - 这不是标准的 HTTP 响应代码。为了到达error:,您需要在后端失败并返回非200 HTTP 响应代码,例如500 错误代码。否则,在您的 success: 回调中,检查 response.success 【参考方案1】:

您的成功回调正在被调用,因为响应成功,因为它返回了 200 的 HTTP status code。

只有当您的控制器操作返回 >= 400 的状态代码时,才会调用您的错误回调。

如果您将controller action 修改为:

return response()->json(
  [
    'success'=>false,
    'message'=>"Error: handler in Ajax should be triggered"
  ], 
  400
);

然后你的错误回调将被调用。

【讨论】:

你能告诉我什么时候HTTP状态码可以返回>=400吗?我是编码新手。 我附上了一个包含每个状态代码描述的列表。但简单来说,你可以说所有以 4xx 开头的状态码都是客户端错误和 5xx 服务器错误。

以上是关于何时出现错误:或成功:在 Ajax 请求中调用的处理程序的主要内容,如果未能解决你的问题,请参考以下文章

Django CSRF 令牌错误或缺少 Ajax POST 请求

Ajax 调用在运行控制器之前出错

在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法

如何在ajax post方法中发送json请求

AJAX 请求触发两次,而成功调用一次

从节点 JavaScript 返回到 jQuery 的 Ajax 调用落在错误函数上