尽管响应为 200,但 Axios 状态为 449

Posted

技术标签:

【中文标题】尽管响应为 200,但 Axios 状态为 449【英文标题】:Axios status is 449 despite response being 200 【发布时间】:2022-01-22 21:56:55 【问题描述】:

我有一个端点/sales/internalorders/5,当我直接在浏览器/curl/等中打开它时,它会返回200。它以application/json 正确返回。

端点由 Laravel 提供,它将来自控制器的数据提供为:

return response()->json(['data' => $return], 200);

我在我的 Vue 组件的 mounted() 挂钩中调用它:

axios.get('admin/sales/internalorders/'+this.$route.params.id)
    .then((response) => console.log(response))
    .catch(error=>console.log(error))

虽然response.request.status 是200,但response.status 正在返回449 并且response.data 未设置:

已编辑说明数据正在由 Laravel 准备

【问题讨论】:

您将不得不向我们提供有关所有这一切的服务器端组件的更多信息。 Vue/Axios 没有设置 449 响应,你的 API/服务器是。 谢谢@ceejayoz - 我已经编辑表明它是由 Laravel 返回的。如果是服务器端的问题,直接打开端点给200是不是很奇怪? 我从来没有让 Laravel 返回没有自定义代码的 449; responseText 中的“不幸的是我们找不到...”看起来您正在构建某种自定义错误处理。 这是端点返回的数据,而不是响应对象属性。端点获取内部 url 并将响应代理到网络。 @ceejayoz 你在正确的轨道上 - 我们应该使用响应宏而不是 response()->json() 并且 Axios 已被覆盖! 【参考方案1】:

这里的问题是 Axios 已被覆盖并且有一个我们应该使用的自定义 Laravel 响应宏。

这显然是为了在整个应用程序中标准化错误消息?

感谢@ceejayoz,他走在了正确的轨道上!

【讨论】:

以上是关于尽管响应为 200,但 Axios 状态为 449的主要内容,如果未能解决你的问题,请参考以下文章

Azure APIM 在预检和从 axios 发出的 GET 请求时返回空响应正文,状态代码为 200

在 Axios 中收到 400 个错误请求,但 Postman 状态为 200

即使响应为 200(成功),也会调用 Axios Catch

Fetch API 和 Axios 是不是将 304 响应视为 200?

跨域请求被阻止,即使它以 200 ok 状态码响应

Ajax 状态为 200 但错误事件触发而不是成功