如何修复错误:
[$ resource:badcfg]资源配置错误。预期的回应 包含一个数组,但有一个对象?
//服务
angular.module('admin.services', ['ngResource'])
// GET TASK LIST ACTIVITY
.factory('getTaskService', function($resource) {
return $resource('../rest/api.php?method=getTask&q=*',{ 'get': {method:'GET'}});
})
//控制器
$scope.getTask = getTaskService.query(function (response) {
angular.forEach(response, function (item) {
if (item.numFound > 0) {
for(var i = 0; i < item.numFound; i++) {
$scope.getTasks[i] = item.docs[i];
}
}
});
});
答案 0 :(得分:168)
此外,如果您的服务是发送对象而不是数组,请将 isArray:false 添加到其声明中。
'query': {method: 'GET', isArray: false }
答案 1 :(得分:103)
$resource("../rest/api"}).get();
返回一个对象。
$resource("../rest/api").query();
返回一个数组。
您必须使用:
return $resource('../rest/api.php?method=getTask&q=*').query();
答案 2 :(得分:33)
首先,您应该以不同的方式配置$resource
:URL中没有查询参数。默认查询参数可以作为resource(url, paramDefaults, actions)
中第二个参数的属性传递。还应提及您配置get
资源方法并改为使用query
。
<强>服务强>
angular.module('admin.services', ['ngResource'])
// GET TASK LIST ACTIVITY
.factory('getTaskService', function($resource) {
return $resource(
'../rest/api.php',
{ method: 'getTask', q: '*' }, // Query parameters
{'query': { method: 'GET' }}
);
})
<强>文档强>
答案 3 :(得分:19)
为了使用$ resource服务处理数组,建议您使用查询方法。如下所示,查询方法是为处理数组而构建的。
{ 'get': {method:'GET'},
'save': {method:'POST'},
'query': {method:'GET', isArray:true},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'}
};
用户$resource("apiUrl").query();
答案 4 :(得分:2)
确保您也发送了正确的参数。切换到UI-Router后,这发生在我身上。
要修复它,我更改了$ routeParams以在我的控制器中使用$ stateParams。主要问题是$ stateParams不再向资源发送适当的参数。
答案 5 :(得分:0)
对于 2021 年来到这里的任何人,此请求的另一种外观如下(至少在我们的应用中)
angular.module('load').factory('StateService', ['$resource', 'store', function($resource, store) {
return $resource('/some/url', {}, {
fetchAllStateCodes: {
method: 'GET',
isArray: true, // Response is an array of objects
headers: {
"Authorization": "Bearer " + store.get("jwt"),
"Content-type": "application/json"
}
}
});
}]);
从所有好的答案中,我仍然不清楚在哪里放置 isArray
标志......