2016-07-20 3 views
0

In meiner Anwendung habe ich ein Formular, in dem der Benutzer mehrere Datensätze hinzufügen kann. Wenn die Seite geladen ist, muss ich eine GET-Anfrage machen, um die Datenbank auf existierende Datensätze zu überprüfen. Wenn Datensätze vorhanden sind, bevölkere ich sie auf der Seite. Kein Problem dort.

Das Problem, das ich habe, ist, wenn die DB keine vorhandenen Datensätze hat, der Server einen 204 Kein Inhalt zurückgeben. Im Controller wird die Erfolgsfunktion weiterhin ausgeführt, aber es gibt keine Daten, nur das $ promise-Objekt und $ resolved: true. Hier

ist der Code:

Factory:

return $resource (
     https://my.backend/api/records/:id", 
     {}, 
     { 
      "getExistingRecords": { 
       method: 'GET', 
       isArray: false, 
       params: {id: '@id'}, 
       withCredentials: true} 
     } 
    ) 

Controller:

function initialize(id){ 
      alertFactory.getExistingRecords({id: id}) 
       .$promise 
       .then(function (records){ 
        if(records){ 
         $scope.existingRecords = records; 
        }else { 
         $scope.existingRecords = {}; 
        } 
       },function(error){ 
        Notification.error(error); 
       }); 
     } 
initialize(id); 

Wenn der Server returns "204 No Content" Ich bekomme diese von der Konsole

Console Image

Ist die einzige Möglichkeit, dies zu überprüfen, um nach Objekteigenschaften des Datensatzobjekts zu suchen?

Zum Beispiel:

function initialize(id){ 
      alertFactory.getExistingRecords({id: id}) 
       .$promise 
       .then(function (records){ 
        if(records.recordName){ 
         $scope.existingRecords = records; 
        }else { 
         $scope.existingRecords = {}; 
        } 
       },function(error){ 
        Notification.error(error); 
       }); 
     } 
initialize(id); 

Oder bin ich etwas fehlt noch?

+0

Sollte nicht 'isArray' sein' true' in Ihrem $ Ressourcendefinition? Im Falle einer leeren Antwort könnte Ihr Server dann ein leeres Array anstelle von '204 no content' zurückgeben. Zumindest die Benennung der Aktion getExistingRecords() Art schlägt vor, dass es ein Array sein sollte. –

+0

Sie könnten immer nur überprüfen, ob Datensätze überhaupt existiert und es ist die Länge ist größer als 0 ... – theDarse

Antwort

0

Es wäre besser gewesen, wenn Sie Statuscode mit Antwort bekommen könnten. Dafür gibt es keinen direkten Weg. Aber man kann workaround mit einem Interceptor:

var resource = $resource(url, {}, { 
    get: { 
     method: 'GET' 
     interceptor: { 
      response: function(response) {  
       var result = response.resource;   
       result.$status = response.status; 
       return result; 
      } 
     } 
    }        
}); 

Und jetzt können Sie:

   if(records.$status === 200){ 
        $scope.existingRecords = records; 
       }else { 
        $scope.existingRecords = {}; 
       } 
+0

Vielen Dank das hat super funktioniert! – conbra

Verwandte Themen