编辑:向回答者道歉,事实证明这实际上是有效的代码,但请求被截获并删除了所有参数。
我尝试向REST API发出重复的HTTP GET请求,具体取决于输出,并使用了this question中的解决方案。
但是,我希望增加我在请求中传递的一个参数。基本上,API会对输出进行分页,我需要相应地增加startAt
的值。
手动请求可以正常使用:
<URL>/board?startAt=50
并回馈:
{"maxResults":50,"startAt":50,"isLast":true,"values":[list_of_values]}
到目前为止,这是我的代码:
function getHttpPromise(start_at) {
// This function recurses until the server returns isLast = true.
//
// Each iteration appends the values in response.values to
// $scope.boards.
test = $http({
url: 'boards',
method: 'GET',
params: {'startAt': start_at.toString()}
}).
success(function (response) {
console.log(response); // the response contains startAt, which always has
// the initial value (0), rather than start_at's value
var values = response.values;
for (var i in values) {
var board = values[i];
$scope.boards[board.id] = board;
}
if (response.isLast) {
// We have received all the boards.
return true;
} else {
// Increment start_at and return another http request promise.
start_at += response.maxResults;
return getHttpPromise(start_at);
}
}
);
console.log(test); // params is correct here
return test;
}
此功能由:
调用jiraWorkLog.controller('SprintSelectCtlr',
function($scope, $http, $routeParams) {
$scope.init = function() {
$scope.boards = new Object();
getHttpPromise(0).then(
function (dummy_var) {
for (var board in $scope.boards) {
...
}
}
);
}
...
);
答案 0 :(得分:0)
不推荐使用$http().success()
。您应该使用$http().then()
。
then
接收的函数将传递给具有response
属性的data
对象。在那里你会找到你的values
。
您可以进一步阅读here
在更彻底地阅读您的代码之后,我必须建议您不要递归地解决这个问题。如果您不希望分页数据,请提前发送所有记录的请求。
现在回答为什么你只得到第一个结果:这是因为这是唯一返回的东西和调用控制器。您正在返回控制器等待解决的承诺。所有其他递归调用仅在控制器完成后才会发生。
答案 1 :(得分:0)
响应包含所有http内容,并且您希望从中获取数据...
我认为以下链接可能对您有所帮助Angular Http
你的递归的另一个问题是你正在更新一个局部变量并错误地使用它...
function getHttpPromise(start_at) {
// This function recurses until the server returns isLast = true.
//
// Each iteration appends the values in response.values to
// $scope.boards.
test = $http({
url: 'boards',
method: 'GET',
params: {'startAt': start_at.toString()}
}).
success(function (response) {
console.log(response.data); // the response contains startAt, which always has
// the initial value (0), rather than start_at's value
var values = response.data;
for (var i in values) {
var board = values[i];
$scope.boards[board.id] = board;
}
if (response.data.isLast) {
// We have received all the boards.
return true;
} else {
// Increment start_at and return another http request promise.
return getHttpPromise(response.data.maxResults+1);
}
}
);
console.log(test); // params is correct here
return test;
}