是否可以在 AngularJS 中阅读 XML RSS?
Is it possible to read XML RSS in AngularJS?
据我所知,使用 AngularJS 从远程主机读取 XML 格式的 RSS 是不可能的。跨源请求错误。同样无法从远程站点加载 XML?
我正在尝试找到一种加载远程 RSS 的方法,它实际上只是来自不同站点的 XML。
例如,我有这条新闻 RSS,我不会在我的 AngularJS 应用程序中显示它。
http://rss.newsru.com/top/big/
使用 $http.get() 导致 CORS 错误
使用 $http.jsonp() 会导致 JSON 格式错误,因为来源是 XML,而不是 json.
如果没有任何服务器端代码,是否有解决此问题的方法?
谢谢
以前可以用Google Feed API
or YQL
to parse XML and return JSON to be used with $http.jsonp()
method. But now both are no longer supported. If you don't want to change your back-end, you can try using rss2json
service as 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>
据我所知,使用 AngularJS 从远程主机读取 XML 格式的 RSS 是不可能的。跨源请求错误。同样无法从远程站点加载 XML?
我正在尝试找到一种加载远程 RSS 的方法,它实际上只是来自不同站点的 XML。
例如,我有这条新闻 RSS,我不会在我的 AngularJS 应用程序中显示它。
http://rss.newsru.com/top/big/
使用 $http.get() 导致 CORS 错误 使用 $http.jsonp() 会导致 JSON 格式错误,因为来源是 XML,而不是 json.
如果没有任何服务器端代码,是否有解决此问题的方法?
谢谢
以前可以用Google Feed API
or YQL
to parse XML and return JSON to be used with $http.jsonp()
method. But now both are no longer supported. If you don't want to change your back-end, you can try using rss2json
service as 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>