据我所知,无法使用AngularJS从远程主机读取XML格式的RSS。 Cross Origin请求错误。以同样的方式无法从远程站点加载XML?
我正在尝试找到一种加载远程RSS的方法,实际上只是来自不同站点的XML。
例如,我有这个新闻RSS,我不会在我的AngularJS应用程序中显示。
http://rss.newsru.com/top/big/
使用$ http.get()会导致CORS错误 使用$ http.jsonp()导致JSON格式错误,因为源是XML,而不是json。
如果没有任何服务器端代码,是否有针对此问题的解决方法?
由于
答案 0 :(得分:3)
过去,您可以使用Google Feed API
或YQL
来解析XML并返回要与$http.jsonp()
method一起使用的JSON。但现在两者都不再支持。如果您不想更改后端,可以尝试使用rss2json
服务作为suggested here(但没有人保证它会稳定运行,因此最好使用您自己的API)
在您的情况下,代码可能如下所示:
(function (angular) {
'use strict';
angular.module('RSSFeedApp', []);
angular.module('RSSFeedApp').controller("FeedCtrl", ['FeedService', function (Feed) {
var vm = this;
Feed.parseFeed('http://rss.newsru.com/top/big/').then(function (res) {
vm.items = res.items;
});
}]);
angular.module('RSSFeedApp').factory('FeedService', ['$http', function ($http) {
return {
parseFeed: function (url) {
return $http.jsonp('//api.rss2json.com/v1/api.json?callback=JSON_CALLBACK&rss_url=' + encodeURIComponent(url)).then(function (res) {
return res.data;
});
}
}
}]);
})(angular);

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.4/angular.min.js"></script>
<div ng-app="RSSFeedApp" ng-controller="FeedCtrl as vm">
<div class="row-fluid">
<ul class="unstyled">
<li ng-repeat="item in vm.items">
<h5><a>{{item.title}}</a></h5>
<p class="text-left">{{item.description}}</p>
<span class="small">{{item.pubDate}}</span>
</li>
</ul>
</div>
</div>
&#13;