AngularJS factory http returns empty

后端 未结 3 889
我寻月下人不归
我寻月下人不归 2020-12-02 19:23

I\'m trying AngularJS for the first time. I\'m getting JSON data from a http-get request using a factory, but the object is returned empty, before the ajax-request is done.<

相关标签:
3条回答
  • 2020-12-02 19:33

    You should modify your code to return a promise and use the value in controller pls see dummy modified code

    myDemo.factory('photosFactory', function($http) {
     return{
        getPhotos : function() {
            return $http({
                url: 'content/test_data.json',
                method: 'GET'
            })
        }
     }
    });
    

    and controller -

    controllers.AppCtrl = function($scope, $location, $http, photosFactory) {
        $scope.photos = [];
        photosFactory.getPhotos().success(function(data){
           $scope.photos=data;
       });
    };
    
    0 讨论(0)
  • 2020-12-02 19:37

    Using the $resource will let you achieve what you want, plus give you much more control compared to $http

    (Do not forget to include ngResrouce as a dependency to your app.)

    myDemo.factory('photosFactory', function($resource) {
        var factory = {};
    
        factory.getPhotos = $resource('content/test_data.json', {}, {
            'query': {method: 'GET', isArray: true}
        });
        return factory;
    });
    
    controllers.AppCtrl = function($scope, $location, $http, photosFactory) {
        $scope.photos = [];
        init();
        function init() {
            $scope.photos = photosFactory.getPhotos.query();
        }
    };
    
    0 讨论(0)
  • 2020-12-02 19:44

    Using the q promise library means your success function can stay in your service:

    app.factory('Data', function ($http, $q) {
        return {
            ajaxItems: function () {
                var deferred = $q.defer();
                $http({ method: "POST", url: "/Home/GetSearchResults" })
                    .success(function (data, status, headers, config) {
                        deferred.resolve(data);
                    }).error(function (data, status, headers, config) {
                        deferred.reject(status);
                    });
                return deferred.promise;
            }
        }
    });
    
    app.controller('ResultsCtrl', ['$scope', 'Data', function ($scope, Data) {
        $scope.get = function () {
            $scope.items = Data.ajaxItems();
            //the model returns a promise and THEN items
            $scope.items.then(function (items) {
                $scope.items = items;
            }, function (status) {
                console.log(status);
            });
        };
    }]);
    
    0 讨论(0)
提交回复
热议问题