【发布时间】:2025-12-19 18:00:11
【问题描述】:
我有一个使用 AngularJS 1.5.8 的前端项目,它与 PHP(Laravel 框架)中的 API 进行通信。 Preflight OPTIONS 请求按预期进行,但我现在面临一个问题,因为我需要知道请求何时特别失败,状态代码为401 Unauthorized。
通过$http(request).then(successFn, errorFn),当errorFn被调用时,它有一个Object参数,其状态为-1。当我检查 Chrome 开发人员工具上的网络选项卡时,请求显然失败,正如预期的那样,401。 有没有办法在 javascript 中获取这个真实的状态代码?我已经看到了一些相关的问题和答案,但大多数都是关于旧版本的 angular(在其中你调用了 .success 方法有多个参数,包括状态)。
我在 API 方面是否缺少 CORS 方面的内容?还是它是 AngularJS 的限制?我也用 Postman 对其进行了测试,它带来了正确的状态码,甚至是一个完整的 JSON 对象,带有 message 和 debug 属性(这些都没有显示在 Chrome 的那个网络选项卡中)。
【问题讨论】:
-
没有。浏览器阻止响应,因为它违反了Same Origin Policy。后端需要使用正确的 CORS 标头来响应 OPTIONS 请求。
-
感谢您确认@georgeawg。实际上,我必须对后端进行更改,现在即使抛出 HttpException ,它也会以正确的 CORS 标头响应。那是丢失的情况(我认为对 OPTIONS 请求的响应是好的)。