AngularJS:使用来自维基百科的网络服务 API

AngularJS: consume web service from Wikipedia API

我正在开发一个 AngularJS 应用程序,我想显示维基百科的一些信息,但我无法访问 Angular 中的数据,因为 CORS 限制。

     $scope.wikipediaData =  $http.get('http://es.wikipedia.org/w/api.php?titles='+$scope.country.name.toLowerCase()+'&rawcontinue=true&action=query&format=json&prop=extracts');

它发出呼叫,我在 firebug 中看到它,我复制了 url 并将其粘贴到另一个选项卡中,我可以看到 JSON 响应。

在 firebug 中,我还看到我必须激活 CORS,但我不知道该怎么做,我尝试了很多我在 Whosebug 和其他网站上阅读过的解决方案.

谁能帮帮我?

谢谢

您可以使用 JSONP 来避免 CORS 问题。

简而言之:服务器必须支持 JSONP,因为它会创建一个 return 字符串,并将您的回调作为 returned JSON 的包装器。然后你的回调函数将得到 JSON 作为参数。 您不需要管理它,因为 Angular 会为您处理。

您只需将 &callback=JSON_CALLBACK 添加到您的 url 并使用 $http.jsonp.

请查看下方和此处的演示 jsfiddle

(维基百科上有 return 但我不知道 return 是不是你想要的。)

var app = angular.module('myApp', []);

app.factory('wikiService', function($http) {
      
    var wikiService = {
        get: function(country) {
            return $http.jsonp('http://es.wikipedia.org/w/api.php?titles=' + country.name.toLowerCase() + '&rawcontinue=true&action=query&format=json&prop=extracts&callback=JSON_CALLBACK');
        }
    };
    
    return wikiService;
});
    
app.controller('MainController', function($scope, wikiService) {

    wikiService.get({name: 'Germany'}).then(function(data) {
        console.log(data);
        $scope.wikiData = data.data;
    });
      
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="MainController">
    <pre ng-bind="wikiData | json"></pre>
</div>
</div>