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


73

如何解决错误:

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

            }

        }
    });

});

Answers:


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


170

另外,如果您的服务正在发送对象而不是数组,则在其声明中添加isArray:false

'query': {method: 'GET', isArray: false }

它对我不起作用。只有起始页(“您创建了一个服务...)将改变IsArray的假时保存。
AJ_83

106
$resource("../rest/api"}).get();

返回一个对象。

$resource("../rest/api").query();

返回一个数组。

您必须使用:

return $resource('../rest/api.php?method=getTask&q=*').query();

3
从错误消息本身中很难看出我使用了另一种方法。
Akzidenzgrotesk

我在答案中的网址上加了引号。如果这不是正确的位置,请进行编辑。
保罗·鲁尼

20

为了使用$ resource服务处理数组,建议您使用查询方法。正如您在下面看到的那样,查询方法是为处理数组而构建的。

    { 'get':    {method:'GET'},
      'save':   {method:'POST'},
      'query':  {method:'GET', isArray:true},
      'remove': {method:'DELETE'},
      'delete': {method:'DELETE'} 
   };

用户 $resource("apiUrl").query();


2

确保您也发送了正确的参数。切换到UI-Router后,这发生在我身上。

为了解决这个问题,我将$ routeParams更改为在控制器中使用$ stateParams。主要问题是$ stateParams不再向资源发送适当的参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.