Я создал службу angular, чтобы поговорить с простым сервером 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, возвращает 'true', который возвращается с сервера, однако console.log(result) возвращает массив символов в 'true' - я предположил, что это из-за параметра isArray: true в "save", что необходимо, потому что params отправляются на сервер как массив:
[$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);
};
Но я все еще не понимаю, как ответ