我有以下angularjs功能:
this.loadDocument = function() {
var documents = [];
alert("load documents");
$http({
url: 'http://localhost:8085/api/jsonws/dlapp/get-file-entries/repository-id/10182/folder-id/0',
method: 'get',
headers: {
"Authorization": this.makeAuth(this.username,this.password)
}
}).success(
function(response) {
alert("sucess");
documents=response;
});
return documents;
};
我从以下代码中调用它:
$scope.loadDocument = function() {
$scope.documents=documentService.loadDocument();
}
但是函数的返回值是未定义的。因为它在执行ajax调用的成功方法之前返回值。
有什么解决方案吗?
提前致谢。
答案 0 :(得分:0)
你需要使用promises。
this.loadDocument = function() {
return $http({
url: 'http://localhost:8085/api/jsonws/dlapp/get-file-entries/repository-id/10182/folder-id/0',
method: 'get',
headers: {
"Authorization": this.makeAuth(this.username,this.password)
}
}).then(
function(response) {
return response;
});
};
loadDocument()函数现在返回一个promise,只有在Ajax调用完成时,才能在控制器中使用它来更新$ scope.documents。
$scope.loadDocument = function() {
documentService.loadDocument().then(
function(result){
$scope.documents= result;
});
}
答案 1 :(得分:-1)
$ http服务的角度返回一个承诺,所以你需要返回这样的承诺:
this.loadDocument = function() {
return $http({
url: 'http://localhost:8085/api/jsonws/dlapp/get-file-entries/repository-id/10182/folder-id/0',
method: 'get',
headers: {
"Authorization": this.makeAuth(this.username, this.password)
}
});
然后你致电诺言并等待成功或失败:
$scope.loadDocument = function() {
documentService.loadDocument().then(function(response){
//the promise success
$scope.documents = response.data;
}).catch(function(err) {
//the promise failed
})
}