>我正在使用Angular HTTP资源从API获取一些数据。API 上的方法实际上是一个 PUT,但返回一个数据数组。(注意,这不是我的API)
它完美地执行HTTP调用,我可以在Google开发人员工具上的网络中看到我的响应是正确的。但是,在尝试使用响应数据时,我不断收到"类型错误:未定义不是一个函数"。
以下是我尝试过的一些不同方法,每种方法都给出相同的TypeError:
HTTP 资源
.factory('Sports', ['$resource', 'SPORTS_CONFIG',
function($resource, SPORTS_CONFIG) {
return $resource(SPORTS_CONFIG.URL, {}, {
get: {
method: 'PUT',
isArray: true
}
});
}
])
角度 JS 尝试
// Construct Sports Body
var s = new Sports($scope.sport);
// Attempt 1
s.$get({}, function(data){
});
// Attempt 2
s.$get({}).then(function(data){
});
// Attempt 3
s.$get({}).$promise.then(data){
});
编辑
在查看了我的错误代码之后,看起来错误发生在我的HTTP资源中的"isArray"上。当我将 isArray 设置为 false 时,它会出错,因为它需要一个对象但得到一个数组。当我保持它为真时,它会出错并说 TypeError:undefined 不是一个函数。当我点击javascript行时,它是'isArray'。
第二次编辑
我已经使用以下代码使其工作:
$scope.teams = Sports.get($scope.sport);
但是,$scope.teams = [0, $promise, $resolved] 。如何只能获得 [0] 而不是$promise和$resolved?
'then' 函数的参数本身应该是一个函数。
例如:
s.$get({}).then(function (data){
});
您的语法看起来有问题,请改为遵循以下方法:
$http.get('/someurl').then(function(response) {
//do something with response.data;
}, function(errResponse) {
console.error('Error while fetching data');
});
如您所见,您应该传入一个函数,该函数从服务器传递响应,然后您可以获取数据。
你可以尝试这样的东西(有一个函数)
$http({
method : "GET",
url : "your_url"
}).success(function(data, status, headers, config) {
$scope.yourVariable= data;
}).error(function(data, status, headers, config) {
alert("Request failed. HTTP status:" + status);
});
由于上面的编辑,这个答案已经过时了。
由于我现在无法发表评论,因此根据需要获取第一项的方法很简单: $scope.teams = Sports.get($scope.sport)[0];