Fehler: [$ resource: badcfg] Fehler in der Ressourcenkonfiguration. Erwartete Antwort, die ein Array enthält, aber ein Objekt hat?

73

So beheben Sie Fehler:

[$ resource: badcfg] Fehler in der Ressourcenkonfiguration. Erwartete Antwort, die ein Array enthält, aber ein Objekt hat?

// Bedienung

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

            }

        }
    });

});
noc
quelle

Antworten:

33

Zunächst sollten Sie $resourceauf unterschiedliche Weise konfigurieren : ohne Abfrageparameter in der URL. Standardabfrageparameter können als Eigenschaften des zweiten Parameters in übergeben werden resource(url, paramDefaults, actions). Es ist auch zu erwähnen, dass Sie die getRessourcenmethode konfigurieren und querystattdessen verwenden.

Bedienung

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

Dokumentation

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

Vadim
quelle
169

Wenn Ihr Dienst ein Objekt anstelle eines Arrays sendet, fügen Sie isArray: false zu seiner Deklaration hinzu.

'query': {method: 'GET', isArray: false }
user1932958
quelle
Es funktioniert nicht für mich. Nur die Startseite ("Sie haben einen Dienst erstellt ...) wird gespeichert, wenn isArray in false
geändert wird
106
$resource("../rest/api"}).get();

gibt ein Objekt zurück.

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

gibt ein Array zurück.

Sie müssen verwenden :

return $resource('../rest/api.php?method=getTask&q=*').query();
Karim Oukara
quelle
3
Anhand der Fehlermeldung selbst war ziemlich schwer zu erkennen, dass ich eine andere Methode verwendet habe.
Akzidenzgrotesk
Ich habe der URL in der Antwort ein Zitat hinzugefügt. Wenn dies nicht der richtige Ort dafür ist, bearbeiten Sie ihn bitte.
Paul Rooney
19

Um Arrays mit dem $ resource-Dienst zu verarbeiten, wird empfohlen, die Abfragemethode zu verwenden. Wie Sie unten sehen können, ist die Abfragemethode für die Verarbeitung von Arrays ausgelegt.

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

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

Hitesh Modha
quelle
2

Stellen Sie sicher, dass Sie auch die richtigen Parameter senden. Dies passierte mir nach dem Wechsel zum UI-Router.

Um dies zu beheben, habe ich $ routeParams geändert, um $ stateParams in meinem Controller zu verwenden. Das Hauptproblem war, dass $ stateParams keinen richtigen Parameter mehr an die Ressource sendete.

Alaa Awad
quelle