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

Javascript AngularJS$http从失败的CORS请求返回状态代码0,javascript,angularjs,xmlhttprequest,cors,Javascript,Angularjs,Xmlhttprequest,Cors,好吧,我已经找遍了。基本上,我们使用的是跨域请求的$http请求。我们的服务器允许域,当请求返回200时,一切正常。然而,每当我们的服务器返回一个错误,500401,不管怎样,Angular认为这是CORS的问题 我用Fiddler调试了响应,以验证我的服务器是否返回了一个500,但有角度阻塞 请求如下: var params = { url: "fakehost/example", method: 'GET',

好吧,我已经找遍了。基本上,我们使用的是跨域请求的$http请求。我们的服务器允许域,当请求返回200时,一切正常。然而,每当我们的服务器返回一个错误,500401,不管怎样,Angular认为这是CORS的问题

我用Fiddler调试了响应,以验证我的服务器是否返回了一个500,但有角度阻塞

请求如下:

       var params = {
            url: "fakehost/example",
            method: 'GET',
            headers: {
                "Authorization": "Basic encodedAuthExample"
            }
        };

       $http(params).then(
            function (response) { // success 

            },
            function (error) { // error 
                 // error.status is always 0, never includes data error msg
            });
然后在控制台中,我将看到:

XMLHttpRequest无法加载fakehost/example。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源代码“mylocalhost:5750”

然而,在fiddler中,真正的反应是:

HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 26 Aug 2014 12:18:17 GMT
Content-Length: 5683

{"errorId":null,"errorMessage":"Index was outside the bounds of the array.","errorDescription":"Stack trace here"}

我在AngularJS v1.2.16上

我想我找到了一个答案,看起来您必须在asp.net管道中注入正确的CORS头,如前所述。

只是确认一下,error.data属性未定义?未定义,但responseError拦截器中的整个响应是:Object{data:“,状态:0,headers:function,config:Object,statusText:}另外,如果我故意发送失败的授权,状态代码和数据会正确返回,因此它必须是500错误和CORS请求的组合:{data:Object,status:401,headers:function,config:Object,statusText:“Unauthorized”}啊,你就是那个男人/女人。这让我记忆犹新,我想我们马上就实现了,但它已经丢失了。非常感谢。我在使用OAuth时也来到这里。我原以为我与CORS无关,但当用户注销并且我的JS页面仍然从浏览器缓存中提供时,这是第一个收到302的XHR。我计划处理它,但结果是Angular随后进入了OAuth提供者的登录页面,这变成了一个跨站点请求(正确地被拒绝)错误处理程序中的status=0让我很惊讶。@acg我无法控制服务器代码来更改响应标题。在这种情况下,有没有办法让angular知道真实的状态代码?我在这方面提出了一个新问题