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

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

            }

        }
    });

});

This question is related to angularjs

The answer is


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();


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

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

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.


$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();