2013-08-31 2 views
3

J'utilise AngularJS 1.2.0. Lorsque j'appelle un webservice avec $ resouce la variable de réponse est toujours vide. Le webservice est appelé correctement et le service web envoie le résultat au navigateur. Le problème est que la réponse (callback (response) {}) est toujours vide.AngularJS 1.2.0 La ressource est vide

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

également avoir ce problème, des solutions totalement non-évidentes :( – JasonS

+0

vous avez probablement besoin d'ajouter '.json' à la fin de votre URL.Cela a changé entre 1.0 et 1.1x/1.2x –

Répondre

0

J'ai créé un plunker qui montre callbacks de ressources $ étant enregistrés de travailler avec un code similaire à la vôtre ici: http://plnkr.co/edit/o7hjbd3H2vl2LuHBjI8O?p=preview

Quand je l'URL que vous avez ci-dessus, je suis une erreur d'origine et la demande n'a pas été fait avec succès, donc j'ai démontré avec un stuck response.json à la place.

+1

Avec Angular 1.0.7 tout Le problème est avec la version 1.2.0! –

+0

ne fonctionne pas avec une ressource non-locale, selon son exemple: http://open.mapquestapi.com/geocoding/v1/address – JasonS

+0

et si vous vous plaignez de XSS , utilisez firefox qui le permet, ne fonctionne toujours pas – JasonS

2

Voici quelques approches différentes utilisant 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); 
    }; 
}); 

jour à base de commentaire

Il semble que le problème que vous rencontrez est que les données revient dans un format inattendu. Voici ce que le code mis à jour ressemblerait (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"}); 
}); 
+0

cela ne fonctionne pas non plus avec les ressources à distance, par exemple: http://open.mapquestapi.com/geocoding/v1/address – JasonS

+1

aha ... il semble que vous avez besoin pour transformer la réponse, je mettrai à jour ma réponse –

+0

génial, je ne sais pas pourquoi cela n'a pas fonctionné avec votre réponse originale (le bareResponse était vide pour remo ressources) mais cette version fonctionne très bien! – JasonS

0

Je vous remercie tous pour l'aide, et probablement que je dis la même chose, mais la vérité est, je ne peux pas le faire juste encore. J'ai corrigé mes erreurs et à ce moment, mon code n'a pas d'erreurs mais toute ma page a disparu. Je ne comprends pas si j'ouvre déjà l'API ou simplement que ça ne marche pas. Je vais envoyer mon code .js pour créer une petite discussion à ce sujet.

Merci pour votre aide.

'use strict';

angular.module ('SiteApp', []) .Commande ('LoginCtrl', [ 'étendue $', '$ location', '$ http', la fonction (portée de $, $ http) { $ scope.user = {nom d'utilisateur: '', mot de passe: ''};

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

} ]);

Questions connexes