错误:[$ resource:badcfg]资源配置错误。预期的响应包含一个数组但得到一个对象?

时间:2013-11-18 06:17:47

标签: angularjs

如何修复错误:

  

[$ 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];

            }

        }
    });

});

6 个答案:

答案 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' }}
    );
  })

<强>文档

http://docs.angularjs.org/api/ngResource.$resource

答案 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 标志......