我有两个链接在一起的$ http查询。第一个从第三方API获取艺术家名称,然后使用AngularJS我从第二个$ http查询填充查询URL,这将从另一个第三方API获得封面。
我发现的问题是,当搜索以“THE”开头的艺术家名称(例如The Smiths)时,第一个API会回复“Smiths,The”,这将不会被第二个API作为艺术家姓名。
如果是这样的话,是否有某种方法可以采取行动来处理艺术家名称收到的结尾为“,”,并在将其解析为第二个$ http查询之前将其更改回来?
以下是相关代码:
$scope.getDetails = function (id) {
$http.get('http://api.discogs.com/artists/' + id).
success(function(data) {
$scope.artist = data;
});
$http.get('http://api.discogs.com/artists/' + id + '/releases?page=1&per_page=12').
success(function(data2) {
$scope.releases = data2.releases;
});
$scope.clicked = true;
$scope.sliding = true;
}
}
function ImageCtrl($scope, $http) {
$scope.image = 'img/record-default.png';
$http.get('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=e8aefa857fc74255570c1ee62b01cdba&artist=' + $scope.artist.name + '&album=' + $scope.release.title + '&format=json').
success(function (data4) {
$scope.image = data4.album.image[2]['#text'];
}
);
};
答案 0 :(得分:1)
将我的评论复制到答案中,因为它似乎有所帮助。
我对问题的建议是观察HTTP请求返回的数据,然后在必要时对监视回调中的任何数据字段进行适当的调整。
$scope.$watch(function() {
return $scope.artist;
}, function() {
var pos = $scope.artist.name.toLowerCase().indexOf(', the');
if (pos != -1) {
$scope.artist.name = 'The ' + $scope.artist.name.slice(0, pos);
}
});
如果您确实发现自己稍后会使用大量顺序,相互依赖的HTTP请求,我建议您使用promise chaining。 : - )