AngularJS:启动init()函数中的HTTP响应为空

时间:2019-01-17 07:47:42

标签: javascript angularjs http response startup

我将AngularJs用于我的WebUi(html)。为了确定已登录的用户,我正在HTML页面启动时调用https rest-web-service请求。但是http“ response”数据为空。 (在其他浏览器中或在ng-click事件中调用该调用时,其余Web服务运行良好。)

所以我的问题是:如何在启动时使用已填满的响应数据调用http请求?

HTML页面-调用我的javascript函数“ init()”:

<body ng-app="MY-APP" ng-controller="webui" ng-init="init()">

AngularJs-函数init():

var app = angular.module('MY-APP', []);
app.controller('webui', function($scope,$http,$log,$window) {

   $scope.init = function() {
       $scope.UserId = $scope.getUserId();
   }

   $scope.getUserId = function() {
       $http.get( $scope.my-app-url + '/user/id' ).then(function (response) {
                 $scope.UserId = response.data.USERID;
                 return $scope.UserId;
             });          
       }
}

3 个答案:

答案 0 :(得分:0)

您所拥有的就是调用您的函数

var app = angular.module('MY-APP', []);
app.controller('webui', function($scope,$http,$log,$window) {

   $scope.UserId=null;

   var getUserId = function() {
       $http.get( $scope.my-app-url + '/user/id' ).then(function (response) {
                 $scope.UserId = response.data.USERID;

             });          
       }

//call your function
getUserId();

}

答案 1 :(得分:0)

问题不在于在启动功能中调用http请求。问题在于使用函数确定变量。

让我在一个简单的示例中进行解释。在我的函数init()中,我已经硬编码了变量定义,例如 $ scope.io =“ csv” ,它工作正常-这些变量可以在同一函数中使用而不会出现问题。但是由函数 $ scope.getMy-App-Url()确定的变量 $ scope.my-app-url 不能在以下函数 $ scope.getUserId()确定变量 $ scope.UserId ,因为此变量在该函数中是“未定义”的。

因此,如何声明或定义变量 $ scope.my-app-url 以便在以下函数 $ scope.getUserId()中使用它?

$scope.init = function() {
    $scope.io = "csv";

    $scope.my-app-url = $scope.getMy-App-Url();

    $scope.UserId = $scope.getUserId();
}

$scope.getMy-App-Url = function() {
    $http.get('my-app-url.json').then(function (response) {
        $scope.my-app-url = response.data.MYAPPURL;
        return $scope.my-app-url;
    });
}

$scope.getUserId = function() {
    $http.get( $scope.my-app-url + '/user/id' ).then(function (response) {
        $scope.UserId = response.data.USERID;
        return $scope.UserId;
    });     
}

答案 2 :(得分:0)

由于您的承诺依赖于另一个承诺,因此我将其重新编写,以确保未定义“ $ scope.my-app-url”。

$scope.getUserId = function() {
    $http.get('my-app-url.json').then(function (response) {
        $scope.my-app-url = response.data.MYAPPURL;
        $http.get( $scope.my-app-url + '/user/id' ).then(function (response) {
          $scope.UserId = response.data.USERID;
          return $scope.UserId;
        });  
    });
}

由于格式不正确,我无法对此发表评论。