Error: [$resource:badcfg] Error in resource configuration. Expected response to contain an array but got an object?

匿名 (未验证) 提交于 2019-12-03 02:44:02

问题:

How fix Error:

[$resource:badcfg] Error in resource configuration. Expected response to contain an array but got an object?

// Service

   angular.module('admin.services', ['ngResource'])            // GET TASK LIST ACTIVITY     .factory('getTaskService', function($resource) {         return $resource('../rest/api.php?method=getTask&q=*',{ 'get':    {method:'GET'}});     })

// Controller

$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];              }          }     });  });

回答1:

First of all you should configure $resource in different manner: without query params in the URL. Default query parameters may be passed as properties of the second parameter in resource(url, paramDefaults, actions). It is also to be mentioned that you configure get method of resource and using query instead.

Service

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

Documentation

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



回答2:

Also, if your service is sending an object instead of an array add isArray:false to its declaration.

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


回答3:

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

returns an object.

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

returns an array.

You must use :

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


回答4:

In order to handle arrays with the $resource service, it's suggested that you use the query method. As you can see below, the query method is built to handle arrays.

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

User $resource("apiUrl").query();



回答5:

Make sure you are sending the proper parameters too. This happened to me after switching to UI-Router.

To fix it, I changed $routeParams to use $stateParams in my controller. The main issue was that $stateParams was no longer sending a proper parameter to the resource.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!