2015-04-04 49 views
2

我正在開發一個AngularJS應用程序,並且我想顯示來自維基百科的一些信息,但由於CORS限制,我無法訪問Angular中的數據。AngularJS:從維基百科API使用Web服務

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

它撥打電話,我看到它的螢火,我複製的URL,並將其粘貼到另一個選項卡中,我可以看到JSON響應。

在firebug中,我也看到我必須激活CORS,但我不知道該怎麼做,而且我嘗試了很多我一直在StackOverflow和其他站點閱讀的解決方案。

任何人都可以幫到我嗎?

感謝

回答

12

你可以使用JSONP避免CORS問題。

簡而言之:服務器必須支持JSONP,因爲它將使用回調創建一個返回字符串作爲返回的JSON的包裝。然後你的回調函數將得到JSON作爲參數。 你不需要管理它,因爲Angular會爲你處理這個問題。

您只需將&callback=JSON_CALLBACK添加到您的網址並使用$http.jsonp即可。

請看下面的演示,在這裏jsfiddle

(有維基百科一回,但我不知道,如果回報是你想要的。)

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>

+0

謝謝!它像一個魅力! – 2015-04-04 17:52:58