我正在为 JSON 运行 $http.get ,并且状态为 0。我已经下载了相同的 JSON 并且 get 在本地工作,并且在 Python 中使用请求库我可以毫无问题地获取 JSON,但是在AngularJS 不起作用。我不明白的是为什么 Angular 没有得到它,但其他一切都得到了。下面的代码片段。
function AgentListCtrl($scope, $http) {
$http.get('http://foo.bar/api/objects').success(function(data) {
$scope.objects = data;
}).error(function(data, status) {
$scope.status1 = status;
});
这会提供 JSON 并在使用本地文件时对其进行解析,否则会失败并将 status1 设置为 0。
只是为了澄清这一点,因为上面的答案中没有直接说明(而是在其评论中),并且像我一样,一些 Angular 新手可能会在这方面花费一些时间:
Angular 的 $resource 将能够在另一台服务器上执行 REST 动词,而该服务器又会正确响应(使用status 200
)。尽管如此,Angular 仍会失败,并显示一条神秘消息,可通过状态 0 进行识别。这会进一步误导,因为在浏览器的调试器中,您实际上可能会看到服务器的答案。
-
Angular 会做一个OPTIONS
跨域请求的请求(至少对于默认的query()
方法),除非有相反规定。通常服务器不会回答所需的内容(即您的表示)。每个请求执行此操作的一种简单方法是指定要执行的方法'GET'
.
$resource('http://yourserver/yourentity/:id', {}, {query: {method: 'GET'});
应答 REST 请求的服务器必须包含 CORS [1] 指定的标头,以便允许 Angular 正确使用响应。本质上这意味着包括Access-Control-Allow-Origin
响应中的标头,指定允许的请求来自的服务器。这个值可能是*
.
为任何将 AngularJS 与 spring-data-rest-webmvc 集成的人补充这个答案:
HATEOAS json 格式的响应不会被 Angular 正确使用,而是产生错误Expected response to contain an array but got an object
。通过添加以下内容可以解决此问题isArray: false
参数到$resouce
的配置;
[2] 中提供了一个为 spring-data-rest-webmvc 场景配置 CORS 的非常中肯的示例(请参阅SimpleCORSFilter
)
[1] https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS
[2] https://spring.io/guides/gs/rest-service-cors/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)