我正在从api访问数据。我在请求数据中将pageSize设置为100,因此会有多个页面返回数据。目前,我只收到最后一页的数据。有没有办法可以遍历页码并将所有数据存储在一起?
所以我想遍历& page = 1直到没有下一页存在。 我正在做$ http.get的方式是:
function userEventData (resp) {
$http({
method: "GET",
url: resp.results["@href"]
}).success(function (responseData) {
logger.info("userEventData responseData", responseData);
filterEventField(responseData);
//return responseData;
});
}
感谢任何帮助。谢谢
答案 0 :(得分:0)
看起来你正在直接从你的控制器调用$ http - 不管怎么说你不应该用角度来做这件事,你绝对不应该这样做。
相反,您将要调用获取所有数据的服务。你的控制器会做这样的事情。这需要GetData()返回一个promise。当这个承诺得到解决时,它会对数据做一些事情。
function userEventData (resp) {
PagedDataService.GetData().then(function(data) {
filterEventData(data)
});
}
此版本的服务应该可以使用,但您需要填写代码以向“数据”添加信息并确定是否有其他页面。
请注意,$ http响应对象有几个属性可以让您确定http请求发生了什么。假设请求成功,r.data
将包含API的实际响应。
app.factory("PagedDataService", ['$http', '$q', function($http, $q) {
var data = [];
var deferred;
function GetPageRecursive(pageNumber) {
var promise = $http.get('url', { page: pageNumber} ).then(function(r) {
// add results to data here
// also figure out if there's another page to get
if(AnotherPage)
GetPageRecursive(pageNumber ++)
else
deferred.resolve(data);
})
return promise;
}
return {
GetData: function() {
deferred = $q.defer();
GetPageRecursive(1);
return deferred.promise
}
}
}]);
答案 1 :(得分:-1)
您可以在成功阻止中执行操作。例如,您可以向数组添加新数据。或者触发另一个服务器调用以获取下一页数据。这将允许您按顺序获取数据。
或者,您可以使用for
循环来触发100个http调用。那可能会很慢。也许您只想在需要时获取数据?也许基于一些用户操作,如滚动或按下按钮。