【问题标题】:Error: [$resource:badcfg] Error in resource configuration. Expected response to contain an array but got an object?错误:[$resource:badcfg] 资源配置错误。包含数组但得到对象的预期响应?
【发布时间】:2013-12-01 05:17:48
【问题描述】:

如何修复错误:

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

            }

        }
    });

});

【问题讨论】:

    标签: angularjs


    【解决方案1】:

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

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

    【讨论】:

    • 这对我不起作用。将 isArray 更改为 false 时,只会保存起始页(“您创建了服务...)。
    【解决方案2】:
    $resource("../rest/api"}).get();
    

    返回一个对象。

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

    返回一个数组。

    你必须使用:

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

    【讨论】:

    • 从错误消息本身很难看出我使用了不同的方法。
    • 我在答案中的网址中添加了引号。如果这不是正确的地方,请编辑。
    【解决方案3】:

    首先你应该以不同的方式配置$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

    【讨论】:

      【解决方案4】:

      为了使用 $resource 服务处理数组,建议您使用查询方法。如下所示,查询方法是为处理数组而构建的。

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          对于 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 标志...

          【讨论】:

            猜你喜欢
            • 2013-12-17
            • 1970-01-01
            • 2015-07-04
            • 1970-01-01
            • 1970-01-01
            • 2014-08-16
            • 2016-09-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多