我正在尝试创建一个应用程序,该应用程序将使用Restangular从雅虎金融API检索股票名称、询问和购买价格。在执行GET请求时,我在创建的本地应用程序中访问公共API时遇到问题。这是我发送的带有参数的URL:
http://finance.yahoo.com/d/quotes.csv?s=MSFT+GE;f=启用
使用Postman,这个get请求返回一个数组,其中包含股票名称、股票的要价和买入价。在poster中执行请求会返回所需的信息,不会出现任何错误。
当我在本地执行此请求时,我会收到以下错误:
XMLHttpRequest无法加载http://finance.yahoo.com/d/quotes.csv?s=MSFT+GE;f=nab。请求的资源上不存在"Access Control Allow Origin"标头。原点'http://localhost因此不允许访问。
HTML代码如下:
<html ng-app="app">
<head>
<title>Restangular</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="//code.angularjs.org/1.2.27/angular-resource.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<script src="//cdn.rawgit.com/mgonto/restangular/master/dist/restangular.min.js"></script>
</head>
<body>
<div ng-controller="IndexCtrl" ng-cloak>
<ul>
<li ng-repeat="person in people">{{person.Name}}</li>
</ul>
</div>
以及JS:
var app = angular.module('app', ['restangular'])
.config(function(RestangularProvider) {
RestangularProvider.setBaseUrl('http://finance.yahoo.com/d');
});
app.controller('IndexCtrl', function($scope, Restangular) {
$scope.people = Restangular.all('quotes.csv?s=MSFT+GE&f=nab').getList();
});
我对这个错误感到困惑,因为这是一个公共的API,POSTMAN可以访问它,所以我假设头已经存在于API服务器中。为什么在向本地请求时会出现此错误?
如有任何帮助,我们将不胜感激。
这是我发出的一个JSONP请求,由于它试图接收CSV文件而失败。我认为restangular也不知道如何读取CSV文件,这正是你正在尝试的。我认为您需要做与现在相同的事情,但使用YQL API,因为我认为这不会起作用。
总之,这是代码:
http://plnkr.co/edit/GokYqzJ0dXw86C6AM2UP?p=preview
请求(通过但由于文件类型而失败):
app.controller('MainCtrl', function($scope, $http) {
$scope.name = 'World';
$http.jsonp('http://finance.yahoo.com/d/quotes.csv', {
params: {
callback: 'JSON_CALLBACK',
s: 'MSFT GE',
f: 'nab'
}
}).success(function(response) {
console.log(response);
}).catch(function(response) {
console.log(response);
})
});