我正在通过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'为空。
不确定下一步该尝试什么。任何见解都表示赞赏。
答案 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/