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

            }

        }
    });

});

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


169

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

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

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

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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.