Javascript 如何在Angular中向控制器获取ajax结果?

Javascript 如何在Angular中向控制器获取ajax结果?,javascript,angularjs,Javascript,Angularjs,我有一个从ajax调用中获得价值的服务。我想将该值存储在一个变量中,并将该变量传递给控制器 angular.module(“数据”,[]).service(“数据服务”,函数($http){ 返回{ 数据:函数(回调){ $http.get('http://www.w3schools.com/angular/customers.php)。成功(回拨); } } }) 角度。模块(“主”、“数据”)。服务(“主服务”,功能(数据服务){ var customerData={} 返回{ Getdat

我有一个从ajax调用中获得价值的服务。我想将该值存储在一个变量中,并将该变量传递给控制器

angular.module(“数据”,[]).service(“数据服务”,函数($http){
返回{
数据:函数(回调){
$http.get('http://www.w3schools.com/angular/customers.php)。成功(回拨);
}
}
})
角度。模块(“主”、“数据”)。服务(“主服务”,功能(数据服务){
var customerData={}
返回{
Getdata:DataService.getCustomers(函数(结果){
customerData=结果;
console.log(customerData)
})
}
})
角度模块(“Home”).控制器(“HomeCntrl”,功能($scope,HomeService){
$scope.Result=HomeService.Getdata;
})
我希望数据存储在
customerData
中,我必须将
customerData
传递给控制器。

请参见我的示例:

跟随至服务和控制器文件夹

小例子:

app.controller('MainCtrl', ['$scope', 'DataService', function($scope, DataService) {


    DataService.getData().then(function (results) {
        $scope.tasks = results;
    }); 

}]);

app.factory('DataService', ['$http', '$q', function ($http, $q) {
var exports = {};

exports.getData = function () {
    var deferred = $q.defer();

    $http.get('/gettask')
        .then(
            function (result) {
                deferred.resolve(result.data);
            },
            function (error) {
                deferred.reject(error);
                console.log('Getting is fail :' + error);
        });

    return deferred.promise;
 };

   return exports;
}]);
无延期:

app.factory('DataService', ['$http', function ($http) {
var exports = {};

exports.getData = function () {


    return $http.get('/gettask')
        .then(
            function (result) {
                return result.data;
            },
            function (error) {

                console.log('Getting is fail :' + error);
        });
 };

   return exports;
}]);

您不应该为此使用回调(尽管也有可能),这不是很方便。所有这些都适用于这种情况。所以你的代码应该是这样的:

angular.module("Data", []).service("DataService", function($http) {
    return {
        getCustomers: function() {
            return $http.get('http://www.w3schools.com/angular/customers.php').then(function(response) {
                return response.data;
            });
        }
    }
});

angular.module("Home", ["Data"]).service("HomeService", function(DataService) {
    return {
        getData: function() {
            return DataService.getCustomers().then(function(data) {
                console.log('customers', data);
                // maybe process data further and return new set
                return data;
            });
        }
    }
});

angular.module("Home").controller("HomeCntrl", function($scope, HomeService) {
    HomeService.getData().then(function(data) {
        $scope.Result = data;
    });
});

演示:

阅读关于延迟反模式的内容。也许吧。这是非常古老的代码,例如这段代码。如果你愿意,我们可以在function中返回$http,默认情况下$http返回promiss。确切地说,在这种情况下,$q是多余的。我的第一个服务是ajax->第二个服务BL->,然后从BL我应该在控制器中获取值答案中的代码已经使用了承诺,我不确定你要的是什么样的例子。我仍然没有得到Controlleries中的值,很抱歉我太草率了,错过了几个地方。检查更新的答案和演示。