从本地域到公共 API 没有'Access-Control-Allow-Origin'错误



我正在尝试创建一个应用程序,该应用程序将使用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);
  })
});

相关内容

  • 没有找到相关文章

最新更新