AngularJS: HTTP-ответ пуст при запуске функции init () - PullRequest
0 голосов
/ 17 января 2019

Я использую AngularJs для моего WebUi (html). Чтобы определить зарегистрированного пользователя , я звоню по запросу https rest-web-service во время запуска моей HTML-страницы. Но данные http "response" пустые. (Вызывающая веб-служба остальных работает нормально в отдельном браузере или при вызове в событии ng-click.)

Итак, мой вопрос: как я могу вызвать 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 голосов
/ 17 января 2019

Проблема не в вызове http-запроса в функции запуска. Проблема заключается в определении переменных с помощью функций.

Позвольте мне объяснить на простом примере. В моей функции init () у меня есть жестко закодированные определения переменных, такие как $ scope.io = "csv" , которая работает нормально - эти переменные могут использоваться в одной и той же функции без проблем. Но переменная $ scope.my-app-url , которая определяется функцией $ scope.getMy-App-Url () , не может использоваться в следующей функции $ scope.getUserId () для определения переменной $ scope.UserId , поскольку в этой функции эта переменная "undefined".

Итак, как объявить или определить переменную $ 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;
    });     
}
0 голосов
/ 17 января 2019

Поскольку у вас есть обещание, которое зависит от другого обещания, я бы переписал его так, чтобы "$ 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;
        });  
    });
}

Я не могу поместить это в комментарий, так как он не будет правильно отформатирован.

0 голосов
/ 17 января 2019

все, что вам нужно, это вызвать вашу функцию

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();

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...