AngularJS 1.2.0 $资源响应为空

时间:2013-08-31 12:25:59

标签: angularjs angularjs-resource

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

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);
      });
  };

3 个答案:

答案 0 :(得分: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"});
});

答案 1 :(得分:0)

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

当我使用你上面的URL时,我收到了一个ORIGIN错误而且请求没有成功,所以我已经用response.json存根证明了。

答案 2 :(得分:0)

我感谢所有人的帮助,也许我说的是同样的事情,但事实是,我还不能做到。我修复了我的错误,此时,我的代码没有错误,但我的所有页面都消失了。我不明白我是否已打开api或只是它不起作用。我将发送我的.js代码,以便对它进行一些讨论。

感谢您的帮助。

'use strict';

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!";
    });
}

} ]);