TypeError:无法读取undefined的属性“success”

时间:2014-12-09 15:00:33

标签: javascript angularjs google-maps parse-platform

我正在创建一个返回位置坐标的服务。但我需要一些方法来返回一个值。

angular.module('google.maps', [])
.factory('geocode', ['$http', 'GOOGLE_MAPS_CREDENTIALS', function ($http,GOOGLE_MAPS_CREDENTIALS) {
    return {
        getCoords: function(addr1, zip) {
            $http.get('https://maps.googleapis.com/maps/api/geocode/json?address='
                +encodeURIComponent(addr1+','+zip)+'&sensor=false'
                +'&key='+GOOGLE_MAPS_CREDENTIALS.API_KEY);
        }
    }
}])
.value('GOOGLE_MAPS_CREDENTIALS', { API_KEY: '_____________' });

在此之后,我有一个控制器调用此函数:

.controller('AddrNewCtrl', ['$scope','$state','$stateParams','geocode','$rootScope','Address',
    function($scope, $state, $stateParams, geocode, $rootScope, Address) {
    $scope.address = {
        userId: {"__type":"Pointer","className":"_User","objectId":$rootScope.user.id}
    };
    $scope.create = function() {
        geocode.getCoords($scope.address.address1, $scope.address.zipCode)
        .success(function(data) { // <-- this is where the console error is.
            var lat = data.results[0].geometry.location.lat;
            var lng = data.results[0].geometry.location.lng;
            $scope.address.location = new Parse.GeoPoint({latitude:lat,longitude:lng});
        });
        Address.create($scope.address)
        .success(function(data) { $state.go('tabs.address-list'); });
    };
}])

问题在于,当我调用成功时,我得到一个TypeError:

TypeError: Cannot read property 'success' of undefined

我实施此服务的方式与任何其他服务之间几乎没有区别,当我console.log数据导致我的$http.get()函数时,我得到了我期待的所有值调用控制器中的函数。

我正在寻找两个答案中的一个:

  1. 为什么success回调会返回错误?
  2. 当我调用geocode服务时,如何简单地返回一个Coordinates对象?

1 个答案:

答案 0 :(得分:4)

你应该

 getCoords: function(addr1, zip) {
         return $http.get('https://maps.googleapis.com/maps/api/geocode/json?address='
            +encodeURIComponent(addr1+','+zip)+'&sensor=false'
            +'&key='+GOOGLE_MAPS_CREDENTIALS.API_KEY);
    }