3

我正在使用 AngularJS 1.2.0。当我使用 $resouce 调用 Web 服务时,响应变量始终为空。正确调用了 Web 服务,并且 Web 服务正在将结果发送到浏览器。问题是 (callback(response){}) 响应总是空的。

angular.module('app').factory('geoCoding',['$resource', function ($resource) {
return $resource('http://open.mapquestapi.com/geocoding/v1/address', {key: getGeoKey()}, {
    locate: {method: 'GET', isArray: false}
});
}]);

$scope.getLocations = function (locationName) {
    return geoCoding.locate({location: locationName}).$promise.then(
      function (response) {
        log.log('response ', response);
        if (response && response.data && response.data.results && response.data.results[0]) {

          var locations = [];

          response.data.results[0].locations.forEach(function (location) {
            locations.push({name: geoUtils.location2String(location), location: location});
          });

          return locations;
        } else {
          return {};
        }

      }, function (error) {
        log.error('Locations Query error: ', error);
      });
  };
4

3 回答 3

2

以下是使用 1.2.0rc1 的几种不同方法。

var app = angular.module('app', ['ngResource']);
app.factory('geoCoding',['$resource', function ($resource) {
  return $resource('response.json', {key: 123}, {
    locate: {method: 'GET', isArray: false}
  });
}]);

app.controller('MainCtrl', function($scope,geoCoding){
  // bind it directly to the async result
  $scope.locations = geoCoding.locate({location: "a location"});

  // use a function to trigger the request
  $scope.getLocations = function () {
    $scope.resp = geoCoding.locate({location: "a location"});
  };

  // use a function to trigger the request using the promise
  $scope.getLocationsAlt = function() {
    geoCoding.locate({location: "a location"}).$promise.then(function(response){
      $scope.respAlt = response;
    }, angular.noop);
  };
});

根据评论更新

看起来您面临的问题是数据以意外的格式返回。这是更新后的代码的样子(http://plnkr.co/edit/xzZHvm?p=preview):

var app = angular.module('app', ['ngResource']);
app.factory('geoCoding',['$resource', '$http', '$log', function ($resource, $http, $log) {
  return $resource('http://open.mapquestapi.com/geocoding/v1/address', {}, {
    locate: {method: 'GET', isArray: true, transformResponse: $http.defaults.transformResponse.concat(function(data, headersGetter) {
      // probably be better if you examined the results in here
      $log.info(data.results[0]);
      return data.results[0].locations;
    })}
  });
}]);
app.controller('MainCtrl', function($scope, $log, geoCoding){
  $scope.locations = geoCoding.locate({location: "Dallas, TX"});
});
于 2013-08-31T15:42:41.703 回答
0

我感谢你们所有人的帮助,也许我在说同样的话,但事实是,我还不能做到这一点。我修复了我的错误,此时,我的代码没有错误,但我的所有页面都消失了。我不明白我是否已经打开了 api 或者只是它不起作用。我将发送我的 .js 代码来创建一些关于它的讨论。

谢谢你的帮助。

'使用严格';

angular.module('SiteApp', []) .controller('LoginCtrl', ['$scope', '$location', '$http', function ($scope, $http) { $scope.user = {username : '', 密码: ''};

$scope.go = function() {
    $http.jsonp('http://beta.cloogy.com:6969/api/1.0', {
          data : {
            User: user.username,
            Password: user.password
          }
      })
    .success(function (data) {
      $scope.$parent.image = data;
      $location.path('/Index'); //this is a simply second view to test
    })
    .error(function (data) {
      $scope.msg="Error loading the page!";
    });
}

} ]);

于 2013-11-08T17:17:25.093 回答
0

我创建了一个 plunker,它显示 $resource 回调正在使用与您类似的代码进行记录:http://plnkr.co/edit/o7hjbd3H2vl2LuHBjI8O?p= preview

当我使用上面的 URL 时,出现 ORIGIN 错误并且请求未成功发出,因此我使用 response.json 存根进行了演示。

于 2013-08-31T14:27:06.877 回答