2013-04-10 16 views
22

Ho il seguente nel mio file di controllo:

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, { 
    'getSelect': { method: 'GET', params: { action: 'GetSelect' } } 
}); 

Subject.getSelect({ applicationId: 3 }, 
    function (resp) { 
     $scope.testAccounts = resp; 
     gridData = null; 
    } 
); 

mie corse codice server e ritorni:

[{"id":5,"name":"xxx"},{"id":6,"name":"yyy"}] 

Tuttavia ottengo il seguente errore:

TypeError: Object #<g> has no method 'push' 
    at copy (http://127.0.0.1:81/Scripts/angular.js:577:21) 

qualcuno ha idea di cosa sto facendo male?

risposta

5

Ho appena cambiato MyService.get(...) a MyService.query(...) perché .get() aspetta un oggetto e .query() aspetta un array.

49

È necessario impostare il parametro isArray su true nella definizione della risorsa se si restituisce un array dal server.

var Subject = $resource('/api/TestAccounts/:action', { applicationId: 3 }, { 
    'getSelect': { method: 'GET', isArray: true, params: { action: 'GetSelect' } } 
}); 

See: AngularJS $resource API

+3

questo è un messaggio di eccezione abbastanza incomprensibile, per un errore che può essere fatto così facilmente. Tuttavia, questa è sicuramente la risposta – chrismarx

+2

Sì, alcuni dei messaggi di errore in Angular sono un po 'vaghi. Sono migliorati, tuttavia questo è ancora un grande dolore per coloro che stanno ancora imparando le corde. –

+0

Ha avuto lo stesso problema e ha cambiato l'output in JSON. Sembrava un'opzione migliore se hai quel lusso. – Jazzy

4

So che questo post è un po 'stantio, ma ho trovato una soluzione quando mi sono imbattuto in questo problema oggi. Seguendo il post qui sotto, ho implementato la soluzione di joelwreed (a metà del thread). Controlla che la destinazione sia una matrice prima di provare a spingere, cosa che risolve il problema.

Link to issue filed on github

7

Per impostazione predefinita, GET aspetta un oggetto {}, interrogare aspetta un array []. Nel tuo caso, l'API Web restituisce un array per GET, quindi devi impostare flag isArray per GET come true. Se la tua API Web ha restituito un oggetto, non è necessario ripristinare tale flag perché è il comportamento predefinito di GET.

Problemi correlati