我试图使用Restangular创建一个应用程序来检索股票名称,从Yahoo Finance API查询和购买价格。我在访问我在执行GET请求时创建的本地应用程序中的公共API时遇到问题。这是我发送参数的网址:
http://finance.yahoo.com/d/quotes.csv?s=MSFT+GE&f=nab
使用Postman,此get请求返回一个数组,其中包含股票的名称,要价和买入价。在邮递员中执行请求会返回所需信息,而不会出现任何错误。
当我在本地执行此请求时,出现以下错误:
XMLHttpRequest无法加载http://finance.yahoo.com/d/quotes.csv?s=MSFT+GE&f=nab。 No' 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服务器中。从本地请求时,为什么会出现此错误?
任何帮助都会非常感激。
答案 0 :(得分:0)
这是我发出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);
})
});