我正在使用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);
});
};
答案 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!";
});
}
} ]);