Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angularJS-无法从http获取变量的值_Angularjs - Fatal编程技术网

angularJS-无法从http获取变量的值

angularJS-无法从http获取变量的值,angularjs,Angularjs,在此控制器中,这是我与服务通信的部分,该服务返回一个我试图分配给变量id的值。这是代码: (function() { angular .module('myApp.abc', []) .factory('myService', function($http) { }) .controller('MyController', function($routeParams, myService, $scope, $uibModal,$http) {

在此控制器中,这是我与服务通信的部分,该服务返回一个我试图分配给变量id的值。这是代码:

(function() {

angular
    .module('myApp.abc', [])

    .factory('myService', function($http) {
    })

    .controller('MyController', function($routeParams, myService, $scope, $uibModal,$http) {
        var vm = this;

        vm.open = function () {
            var modalInstance = $uibModal.open({
                animation: $scope.animationsEnabled,
                templateUrl: 'path to modal popup',
                controller: 'modalPopController',
                resolve: {
                    id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                            return myid;
                        });
                    }
                }
            });

            modalInstance.result.then(function (myCroppedImage) {
                vm.member.avatar = myCroppedImage;
            }, function () {
                $log.info('Modal dismissed at: ' + new Date());
            });
        };

    });
})();
但我得到了一个未定义的错误。那是什么

更新

如果我像这样放置一个静态值,它可以正常工作

var modalInstance = $uibModal.open({
                animation: $scope.animationsEnabled,
                templateUrl: 'path to modal popup',
                controller: 'modalPopController',
                resolve: {
                    id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                            return myid;
                        });
                    }
                }
            });
我的服务以JSON的形式返回结果,如下所示:

resolve: {
                    id: function () {
                        return 5;
                    }
                }

我不确定这是否对你有用,但你可以试试这样的东西

{"id":"5","name":"John"}
我认为不是:

var modalInstance = $uibModal.open({
                animation: $scope.animationsEnabled,
                templateUrl: 'path to modal popup',
                controller: 'modalPopController',
                resolve: {
                    id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        var defer = $q.defer();
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                           defer.resolve(myid);
                        });
                    return defer.promise;
                  }
                }
            });
你可以:

id: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        $http.get(baseUrl+ 'get_user_session')
                        .then(function(response) {
                            myid = response.id;
                            return myid;
                        });
                    }
然后在以后的
modal controller
中使用
id=response.id


或者另一种方法是创建您自己的defer对象并在http.net中解析它,然后从函数返回defer.promise(如@elasticrash所示)。

实际响应数据位于response.data中,因此您应该使用以下内容:

response: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        return $http.get(baseUrl+ 'get_user_session');
                    }
还有一些澄清: 响应对象包含响应头、状态代码、状态文本和配置。数据只是响应的一部分。这就是为什么您应该使用response.data来获取实际的响应数据。response.status包含HTTP响应代码和response.config.headers,例如原始HTTP请求头


只需执行一个console.log(response),您就会看到数据在response对象中的结构。

哪一行出现未定义错误?如果是myid=response.id,那么您可能需要在该行中检查您的服务呼叫Yes。服务很好。它返回一个JSON,如下所示:{“id”:“5”,“name”:“John”}服务很好。我仔细检查了一下@如果服务工作正常,那么您可以尝试返回response.id;问题可能是由于$http中的返回与id函数的作用域不同,因此在继续之前,您需要以某种方式解析请求
response: function () 
                    {
                        var myid;
                        var baseUrl = 'services/';
                        return $http.get(baseUrl+ 'get_user_session');
                    }
myid = response.data.id