AngularJS mit ngResource: Wie überprüfe ich die genaue Antwort vom Server?

Ich habe einen Angular-Service erstellt, um mit einem einfachen REST-Server in PHP zu kommunizieren. Ich kann sehen, dass ich einen einzelnen Datensatz, eine Liste aller Datensätze und neue Datensätze hinzufügen kann. Nach dem Hinzufügen neuer Datensätze habe ich jedoch ein Problem damit, die richtige Antwort vom Server zu erhalten, um darauf reagieren zu können.

Ich weiß, dass es funktioniert, weil die neuen Datensätze hinzugefügt werden. Ich möchte jedoch Benachrichtigungen für Benutzer einrichten, wenn die Anforderung aus irgendeinem Grund nicht funktioniert, und so weiter.

Dies ist der Service:

angular.module('adminApp.services', ['ngResource'])

    .factory('Settings', function($resource) {

        return $resource('rest/setting/:id', {id: '@id'}, {
            'query' : { method: 'GET', params: {}, format: 'json', isArray: true },
            'save'  : { method: 'POST', params: {}, format: 'json', isArray: true },
            'get'   : { method: 'GET', params: {}, format: 'json', isArray: false },
            'update': { method: 'PUT', params: {id: '@id'}, format: 'json', isArray: true },
            'delete': { method: 'DELETE', params: {id: '@id'}, format: 'json', isArray: false }
    });

});

Als Teil des Controllers habe ich Folgendes:

$scope.save = function() {
    var result = Settings.save({}, $scope.settings);

    console.log(result);

    // Here I would like to send the result to the dialog
    // to determine wether or not the request was successful
    // dialog.close(result);
};

Die Netzwerkantwort von der HTTP-Anforderung, die über die Javascript-Konsole angezeigt wird, gibt "true" zurück, was vom Server zurückkommt. Die Datei console.log (result) gibt jedoch ein Array der Zeichen in "true" zurück - ich hatte dies erraten liegt an der Option isArray: true in 'save', die erforderlich ist, da die Parameter jedoch als Array an den Server gesendet werden:

[$promise: Object, $resolved: false]
    0: "t",
    1: "r",
    2: "u",
    3: "e",
    $promise: Object,

    // I tried passing result.$resolved to the dialog,
    // but if yousee above it resolves to false up top first
    $resolved: true,
    length: 4,
    __proto__: Array[0]

Ich weiß, dass die HTTP-Antwort ein json-Wert von true ist. Wenn ich mich darauf einlassen könnte, wäre das einfach. (Ich komme aus einem jQuery-Hintergrund. Vielleicht mache ich es falsch. Ich habe mir vorgenommen, jQuery vollständig daraus zu entfernen.) Projekt, damit es mein Lernen nicht behindert).

Die Frage ist wohl, wie ich diese Antwort vom Server auf eine JS-Variable bekomme, mit der ich tatsächlich arbeiten kann.

Bearbeiten: Aktualisiert

Ich habe meinen Service geändert zu:

angular.module('adminApp.services', ['ngResource'])
    .factory('Settings', function($http, $resource, $log) {
        return $resource('rest/setting/:id', {id: '@id'}, {
            save   : {
            method: 'POST',
            params: {},
            format: 'json',
            isArray: true,
            transformResponse: [function(data, headersGetter) {
                $log.info(data); // returns true
                return { response: data };
            }].concat($http.defaults.transformResponse)
        },
        update : { method: 'PUT', params: {id: '@id'}, format: 'json', isArray: true },
        delete : { method: 'DELETE', params: {id: '@id'}, format: 'json', isArray: false }
    });

});

Und der Aufruf an:

$scope.save = function() {
    $scope.results = Settings.save({}, $scope.settings);
    console.log($scope.results); // Still returns the response with $promise
    //dialog.close(true);
};

Aber ich werde immer noch nicht als Antwort wahr

Antworten auf die Frage(2)

Ihre Antwort auf die Frage