函数不会返回$ http响应

时间:2015-05-14 14:31:00

标签: javascript angularjs

我创建了一个函数表达式并将其分配给范围,这个想法是该函数将启动$ http请求,获取属性然后返回它。

$scope.getRequestDigest = function () {
    var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
    $http.post(url)
    .success(function (res) {
        return res;
    });
}

但是当我调用$ scope.getRequestDigest()时,它只返回undefined,大概是因为ajax调用还没有完成。在$ http请求完成之前,有没有办法延迟返回?我尝试过使用.success()承诺,但这似乎不起作用。

3 个答案:

答案 0 :(得分:2)

$http.post会返回一个承诺(请参阅$q)。要使用结果,请将res绑定到$scope.res

<强>控制器:

$scope.getRequestDigest = function () {
    var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
    $http.post(url)
    .success(function (res) {
        $scope.res = res;
    });
}

然后,您可以在任何地方使用$scope.res(或模板中的res)。

解决了承诺链后(success之后),Angular将运行摘要周期并重新绑定$scope上的所有内容。

答案 1 :(得分:1)

尝试

$scope.getRequestDigest = function () {
    var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
    return $http.post(url);
}

var digestPromise = $scope.getRequestDigest();
digestPromise.then(function(response){
    console.log(response.data);
});

通过这种方式,您实际上会返回promise,AngularJS通过$q服务实现。

如果您要输出(console.log(digestPromise)digestPromise,您会看到可以在其上添加各种功能,例如successcomplete

答案 2 :(得分:0)

您可以使用.then

来使用连锁承诺
$scope.getRequestDigest = function () {
    var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
    return $http.post(url) //this will return a promise
    .then(function (res) {
        return res.data; //on success this will return a data to caller function
    });
}

然后调用者函数将调用该函数并获取这样的数据

$scope.getRequestDigest().then(function(data){
   console.log(data)
   //here you can get data returned from `getRequestDigest` method
})