Angularjs http.get失败(但我看到数据被返回)

时间:2013-09-02 02:16:05

标签: javascript angularjs

我正在通过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而不是OPTIONS请求,并且电话JSON在响应中。但http.get仍然失败,状态为0,'data'为空。

不确定下一步该尝试什么。任何见解都表示赞赏。

3 个答案:

答案 0 :(得分: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

编辑:

查看角度调试工具here。它向您显示示波器中可用的内容,并显示性能数据。

答案 1 :(得分:0)

好吧,如果您要提出跨域请求,那么将OPTION请求作为pre-flight request发出是对的,以了解您是否被允许。 如果CORS失败,您的浏览器将收到数据,但它会抛出错误。 所以,要么将你的html放在同一个域中,要么将CORS添加到你的后端(这更难)。

答案 2 :(得分:0)

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

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