我创建了一个角度服务来与一个用 PHP 制作的简单 REST 服务器对话。我可以看到我能够获取单个记录、所有记录的列表并添加新记录,但是,在添加新记录之后,我在从服务器获取正确响应以对其进行操作时遇到问题。
我知道它正在工作,因为正在添加新记录,但是,如果由于某种原因请求不起作用,我希望向用户发出通知,等等......
这是服务:
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);
};
通过 javascript 控制台看到的来自 HTTP 请求的网络响应返回从服务器返回的“true”,但是,console.log(result) 返回“true”中的字符数组——我猜到了是因为 'save' 中的 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 响应是一个 true 的 json 值,如果我可以挂钩它会很容易(我来自 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);
};
但我仍然没有得到真实的回应