6

我正在浏览 Angularjs 电话教程,并希望从远程服务器获取电话 JSON。

$http.get('http://myserver.com/phones.json').success(function(data) {
    $scope.phones = data;
});

由于 CORS 失败,我发送的是 OPTIONS 而不是 GET 请求,所以我将第一行添加到控制器

delete $http.defaults.headers.common['X-Requested-With'];    

我现在可以在 Charles 中看到正在向 myserver.com 发出 GET not OPTIONS 请求,并且手机 JSON 在响应中。但是 http.get 仍然失败,状态为 0 并且“数据”为空。

不知道接下来要尝试什么。任何见解表示赞赏。

4

3 回答 3

2

它不应该为 GET 发出 OPTIONS 请求,所以听起来是对的。我想你想做的是:

$http.get('http://myserver.com/phones.json').then(function(data) {
  $scope.phones = data;
}, function(err) { alert('Oh no! An error!'});

我想你想使用then(),它接受两个函数作为参数——第一个表示成功,第二个表示错误。$http.get()返回一个由 执行的承诺then()

此外,您可能想要使用$resource而不是$http. 它提供了更高级别的抽象,并允许更可重用的样式,http://docs.angularjs.org/api/ngResource .$resource

编辑:

在此处查看角度调试工具。它向您显示范围内可用的内容,并显示性能数据。

于 2013-09-02T02:32:46.683 回答
0

这是一个很好的教程,它使用 $http.jsonp 方法实现跨域GETS。没有对标题的黑客攻击。

http://net.tutsplus.com/tutorials/javascript-ajax/building-a-web-app-from-scratch-in-angularjs/

于 2013-09-04T20:19:00.157 回答
0

好吧,如果您正在发出跨域请求,那么将 OPTION 请求作为飞行前请求以了解您是否被允许这样做是正确的。如果 CORS 失败,您的浏览器将接收数据,但会引发错误。因此,要么将 html 放在同一个域中,要么将 CORS 添加到后端(这更困难)。

于 2013-09-02T20:30:04.560 回答