my RESTful API returns an array:
GET /test => [1367297123312,1.0,2.0,3.0,100]
I have a service:
(angular
 .module('app.services', ['ng', 'ngResource'])
 .factory('myData', [
     /******/ '$resource',
     function ($resource) {
         return $resource('test');
     }])
);
In my controller I need to get the numbers. I tried:
(angular
 .module('app.controllers', ['ng', 'app.services'])
 .controller('tweetsapiContr', [
     /******/ '$scope', 'myData',
     function ($scope,   myData) {
         myData.get({}, function (data) {
             console.log(data);
         };
     }
 ])
);
The above gives me TypeError: Object #<h> has no method 'push' error, and if I use query instead of get on the service, it returns an array of objects that have methods like $get, $save etc, but calling $get for example returns undefined.
How to get the numbers? Responding with a hash from the server works, but I am trying to figure out how to make it work with arrays.
A resource "class" object with methods for the default set of resource actions optionally > extended with custom
actions. The default set contains these actions:
{ 'get':    {method:'GET'},
  'save':   {method:'POST'},
  'query':  {method:'GET', isArray:true},
  'remove': {method:'DELETE'},
  'delete': {method:'DELETE'} };
So you have two options:
$resource("/url/:someParam", {}, {
    getMyArray: {method:"GET", params: {someParam:"hello"}, isArray: true}
});
Resource object has a query method which is defined with isArray: true as you can see in the top of the answer.
Please be advised that responding with a top level array to a GET method has security vulnerabilities as array constructors can be redefined. 
Read those: JSON security best practices? What are "top level JSON arrays" and why are they a security risk?
This open issue (#4314) has good information about why numbers (and other primitive data types like strings) cannot be parsed by $resource.
From what I understand, $resource needs to work on objects so that it can attach it's methods (get, query, post, etc...).  If all you are trying to do is to read the array and never need to 'update' it, they recommend using just straight up $http.
Hope that helps clear things up and points future readers of this question in the right direction for best practices in dealing with arrays over a REST api.
You can add a custom action to the resource with isArray: true; (resource docs)
return $resource('test', {}, {
  getArray: { method: 'GET', isArray: true } 
};
Then I believe you have to call it with a dollar sign myData.$getArray
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With