Tôi đã tạo ra một dịch vụ góc để nói về một máy chủ REST đơn giản được thực hiện bằng PHP. Tôi có thể thấy rằng tôi có thể nhận được một bản ghi, danh sách tất cả bản ghi và thêm bản ghi mới, tuy nhiên, sau khi thêm bản ghi mới, tôi gặp sự cố khi nhận phản hồi chính xác từ máy chủ để có thể thực hiện.AngularJS với ngResource: Cách kiểm tra phản hồi chính xác từ máy chủ?
Tôi biết nó làm việc vì kỷ lục mới đang nhận được thêm, tuy nhiên, tôi muốn đưa thông báo cho người dùng nếu vì bất cứ lý do yêu cầu không làm việc, và vân vân ...
Đây là dịch vụ:
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 }
});
});
là một phần của bộ điều khiển, tôi có như sau:
$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);
};
Câu trả lời Mạng từ yêu cầu HTTP, như đã thấy qua giao diện điều khiển retur javascript ns 'true' quay trở lại từ máy chủ, tuy nhiên, console.log (kết quả) trả về một mảng các ký tự trong 'true' - tôi đã đoán điều này là do tùy chọn isArray: true trong 'save' là cần thiết vì params được gửi đến máy chủ như là một mảng mặc dù:
[$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]
tôi biết các phản ứng HTTP là một giá trị json của sự thật, nếu tôi có thể móc vào đó nó sẽ được dễ dàng (tôi đến từ một nền tảng jQuery , có lẽ tôi đang làm sai, tôi đã làm cho nó một điểm để loại bỏ jQuery hoàn toàn từ dự án này là không cho phép nó để ức chế học tập của tôi).
Tôi đoán câu hỏi là, làm cách nào để thực sự nhận được phản hồi đó từ máy chủ lên biến JS mà tôi thực sự có thể làm việc cùng?
Edit: Cập nhật
tôi đã thay đổi dịch vụ của tôi để:
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 }
});
});
Và cuộc gọi đến:
$scope.save = function() {
$scope.results = Settings.save({}, $scope.settings);
console.log($scope.results); // Still returns the response with $promise
//dialog.close(true);
};
Nhưng tôi vẫn không nhận được đúng như phản ứng
Tôi hy vọng tôi hiểu được sự cố. Thử thêm hai cuộc gọi lại vào cuộc gọi 'Settings.save' của bạn. Họ là những callbacks thành công và thất bại tương ứng. Xem tại đây: http://docs.angularjs.org/api/ngResource.$resource. Tôi cho rằng bạn có thể hiển thị mã lỗi từ cuộc gọi lại thứ hai của mình. – akonsu
Tôi khá chắc chắn rằng bạn không cần isArray cho dữ liệu được gửi là một mảng, nó chỉ sửa đổi cách hiểu giá trị trả về http://docs.angularjs.org/api/ngResource.$resource – shaunhusain
@shaunhusain Khi tôi có isArray: false Tôi sẽ nhận được một thông báo lỗi rằng biến push không có sẵn, một số googling tiết lộ rằng điều này đã được cố định bằng cách thêm isArray: true cho cuộc gọi. –