AngularJS с ngResource: как проверить точный ответ от сервера?
Я создал угловой сервис для общения с простым REST-сервером, созданным на PHP. Я вижу, что могу получить одну запись, список всех записей и добавить новые записи, однако после добавления новых записей у меня возникает проблема с получением правильного ответа от сервера, чтобы иметь возможность воздействовать на него.
Я знаю это'работает, потому что новые записи добавляются, однако я хочу разместить уведомления для пользователей, если по какой-либо причине запрос не работает, и так далее ...
Это сервис:
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 }
});
});
В составе контроллера у меня есть следующее:
$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);
};
Сетевой ответ от HTTP-запроса, видимый через консоль javascript, возвращает 'правда' который возвращается с сервера, однако console.log (результат) возвращает массив символов вправда' - Я догадался, что это из-за опции isArray: true в 'спасти' что необходимо, потому что параметры отправляются на сервер в виде массива:
[$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]
Я знаю, что HTTP-ответ - это значение json, равное true, если бы я мог подключиться к нему, это было бы легко (я пришел из фона jQuery, может быть, я 'Я делаю это неправильно, я решил полностью удалить jQuery из этого проекта, чтобы он не мешал моему обучению).
Наверное, вопрос в том, как мне получить ответ от сервера на переменную JS, с которой я могу работать?
Изменить: Обновлено
Я изменил свой сервис на:
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 }
});
});
И призыв к:
$scope.save = function() {
$scope.results = Settings.save({}, $scope.settings);
console.log($scope.results); // Still returns the response with $promise
//dialog.close(true);
};
Но я'м до сих пор не сбылась как ответ