AngularJS $http 从失败的 CORS 请求返回状态代码 0

angularjs

1个回答

写回答

whf123whf

2025-07-09 16:55

+ 关注

AngularJS
AngularJS

AngularJS $http 从失败的 CORS 请求返回状态代码 0

在开发 Web 应用程序时,我们经常会遇到跨域资源共享(CORS)的问题。CORS 是一种安全机制,用于限制在浏览器中的 JavaScript 代码从不同域中访问资源。当我们使用 AngularJS 的 $http 服务发送跨域请求时,有时会遇到一个奇怪的问题:请求失败后,$http 会返回一个状态代码 0,而不是通常的错误状态代码。

问题描述

当我们发送一个跨域请求时,浏览器会首先发送一个 OPTIONS 请求,以确定服务器是否允许该请求。如果服务器返回了正确的响应头,浏览器将继续发送实际的请求。然而,如果服务器没有正确地配置 CORS,它可能会返回一个错误响应,导致浏览器拒绝发送实际请求并返回一个状态代码 0。

案例代码

下面是一个简单的 AngularJS 控制器,它使用 $http 服务发送一个跨域请求:

Javascript

angular.module('myApp', [])

.controller('myController', function($scope, $http) {

var url = 'https://api.example.com/data';

$http.get(url)

.then(function(response) {

// 处理成功响应

$scope.data = response.data;

})

.catch(function(error) {

// 处理错误响应

if (error.status === 0) {

console.log('请求失败,状态代码为 0');

} else {

console.log('请求失败,状态代码为 ' + error.status);

}

});

});

在上面的代码中,我们尝试从 https://api.example.com/data 获取数据。如果请求成功,我们将数据存储在 $scope.data 中。如果请求失败,我们检查错误的状态代码。如果状态代码为 0,我们将打印一条错误消息。

解决方法

虽然状态代码为 0 的错误看起来很奇怪,但它实际上是浏览器的一种行为。当浏览器拒绝发送实际请求时,$http 会将状态代码设置为 0。要解决这个问题,我们可以添加一个错误处理程序,以检查状态代码是否为 0,并采取相应的措施。

Javascript

$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

在代码中添加上述配置后,$http 服务会在发送请求时将一个特殊的请求头 X-Requested-With: XMLHttpRequest 添加到请求中。这将告诉服务器我们是通过 XMLHttpRequest 发送的请求。

在开发使用 AngularJS 的 Web 应用程序时,我们可能会遇到从失败的 CORS 请求返回状态代码 0 的问题。这是由浏览器的行为引起的,当浏览器拒绝发送实际请求时,$http 会返回状态代码 0。为了解决这个问题,我们可以添加一个特殊的请求头,告诉服务器我们是通过 XMLHttpRequest 发送的请求。这样,服务器就能正确地处理跨域请求并返回正确的响应。

希望本文能帮助你解决从失败的 CORS 请求返回状态代码 0 的问题,并顺利进行跨域请求的开发工作。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号