2013-04-10 3 views
22

ich folgendes in meinem Controller-Datei haben:

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

Mein Server-Code läuft und kehrt:

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

jedoch Ich bekomme folgende Fehlermeldung:

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

Hat jemand eine Idee, was ich falsch mache?

Antwort

5

Ich habe gerade geändert MyService.get(...) zu MyService.query(...) weil .get() erwartet ein Objekt und .query() erwartet ein Array.

49

Sie müssen den Parameter isArray in Ihrer Ressourcendefinition auf true setzen, wenn Sie ein Array vom Server zurückgeben.

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

See: AngularJS $resource API

+3

das ist eine ziemlich unverständliche Ausnahme Nachricht, für einen Fehler, der so leicht gemacht werden kann. Dennoch, das ist definitiv die Antwort – chrismarx

+2

Ja einige der Fehlermeldungen in Angular sind ein bisschen vage. Sie sind besser geworden, aber dieser ist immer noch ein großer Schmerz für diejenigen, die immer noch die Seile lernen. –

+0

Hatte das gleiche Problem und änderte die Ausgabe in JSON. Schien eine bessere Option, wenn Sie diesen Luxus haben. – Jazzy

4

Ich weiß, dass dieser Beitrag ein bisschen veraltet ist, aber ich habe eine Lösung gefunden, wenn ich in dieses Problem heute lief. Dem unten stehenden Beitrag folgend implementierte ich joelreed's Lösung (auf halbem Weg den Thread runter). Es prüft, ob das Ziel ein Array ist, bevor es versucht zu pushen, was das Problem behebt.

Link to issue filed on github

7

standardmäßig GET erwartet ein Objekt {}, QUERY erwartet ein Array []. In Ihrem Fall gibt die Web-API ein Array für GET zurück. Daher müssen Sie das isArray-Flag für GET auf true setzen. Wenn Ihre Web-API ein Objekt zurückgegeben hat, müssen Sie dieses Flag nicht zurücksetzen, da dies das Standardverhalten von GET ist.

Verwandte Themen