在http.post请求

时间:2018-04-20 14:40:12

标签: php angularjs

我发布了AngularJS http.post,将response.data放入successCallback函数的范围内。 console.log写入范围数据但我无法访问另一个函数中的范围数据。

Init调用请求函数。

$scope.init = function(group_year_id,year)
{
    accessScopeFunction();
    foo();
};

这是被调用的函数

function accessScopeFunction() {

    $http({
        method: 'POST',
        url: 'http://localhost/sjb/public/admin/groups/assing/angular/get/databasename'
    }).then(function successCallback(response) {
        $scope.getDatabaseName = response.data.event_db;
        console.log($scope.getDatabaseName);            
    }, function errorCallback(response) {
        return 'Fault';
    });

};

我想将$ scope.getDatabaseName传递给另一个函数

function foo() {

    $http({
        method: 'POST',
        url: 'http://localhost/sjb/',
        data: {'databasename':$scope.getDatabaseName}
    }).then(function successCallback(response) {

    }, function errorCallback(response) {

    });
};

我阅读了很多关于承诺,AngularJS文档等的内容,但我找不到适合我的解决方案。

2 个答案:

答案 0 :(得分:1)

嗯,很容易。 $http会返回promise。因此,使用这个不错的附加功能来创建自己的promises

您的代码目前发生的情况如下:

accessScopeFunction();
foo();

它们是相互调用的,因此accessScopeFunction()仍在处理并等待解决。 foo()也被称为。所以你需要做的就是等待accessScopeFunction()完成。

您可以使用promise正在返回的$http来电来执行此操作:

function accessScopeFunction()
{
    var promise = $http(
        {
            method: 'POST',
            url: 'http://localhost/sjb/public/admin/groups/assing/angular/get/databasename'
        }
    ).then(
        function successCallback(response)
        {
            $scope.getDatabaseName = response.data.event_db;
            console.log($scope.getDatabaseName);
        },
        function errorCallback(response)
        {
            return 'Fault';
        }
    );

    // Return the promise
    return promise;
};

foo()

执行相同的操作
function foo()
{
    var promise = $http({
            method: 'POST',
            url: 'http://localhost/sjb/',
            data: {
                'databasename': $scope.getDatabaseName
            }
        }
    ).then(
        function successCallback(response)
        {

        }, function errorCallback(response)
        {

        }
    );

    return promise;
};

然后致电accessScopeFunction()并使用then()回调来致电foo()

$scope.init = function (group_year_id, year)
{
    accessScopeFunction().then(
        function ()
        {
            foo();
        }
    );
};

foo()可以使用相同的方式。

foo().then(function () { ... })

答案 1 :(得分:0)

您必须链接您的承诺,以便您可以访问第二个函数中的第一个结果:

$scope.init = function(group_year_id,year)
{
  accessScopeFunction().then(foo(databaseName))
};

function accessScopeFunction() {
  return  $http({
    method: 'POST',
    url: 'http://localhost/sjb/public/admin/groups/assing/angular/get/databasename'
  }).then(function successCallback(response) {
    $scope.getDatabaseName = response.data.event_db;
    return $scope.getDatabaseName;
  }, function errorCallback(response) {
    return 'Fault';
  });
};

function foo() {

  $http({
    method: 'POST',
    url: 'http://localhost/sjb/',
    data: {'databasename':$scope.getDatabaseName}
  }).then(function successCallback(response) {

  }, function errorCallback(response) {

  });
};