app.factory('getAllActivities', function ($http, $q) { return { getAll: function(reqId) { var deferred = $q.defer(); $http.post('GetData.php', {command : 'getAll'}) .success(function(data) { deferred.resolve(data); }) .error(function(msg, code) { deferred.reject(msg); $log.error(msg, code); }); return deferred.promise; } } });
Hi Jim,
Your code is needlessly complex, $http returns a promise to begin with.
app.factory('getAllActivities', function ($http, $q) {
return {
getAll: $http.post('GetData.php', {command : 'getAll'})
}
}
app.factory('getAllActivities', function ($http, $q) {
var all = $http.post('GetData.php', {command : 'getAll'})
return {
getAll: all,
getId: function (id) {}
return $http.post('GetData.php', {command : 'getId',id:id})
}
return {
}
}
The first service is exactly the same as your version, with the exception that you will retrieve the complete response, in stead of just the data (hence, you need to use result.data in your code)
the second one does only does 1 $http request and keeps that for reuse trough the entire life-cycle of your app, and the second method can fetch an id. (you probably want to do that every time…)
Does this help you enough? if you have additional questions, don’t hesitate to ask!
Regards
Sander
Hi Sander,
Thanks for the reply. As you can probably tell, I am new to angularjs. I took a paid for video course on it, and used the app code in the course to "start off". After quite a few hours spent on creating my first app, I was clueless about how the http service worked with the server. The course did not use an actual server, but used hard coded arrays to return fixed data. The following factory code is what was in the course, modified for http access to a server.
app.factory('ActivitiesFactory', function($http) {
var service = {};
var service.entry;
service.entries = [];
service.getAll = function() {
$http.post('GetData.php', {command : 'getAll'})
.success(function(data){
service.entries = data;
})
.error(function(data, status){
alert('error!');
});
}
service.getById = function(id) {
$http.post('GetData.php', {command : 'getById'})
.success(function(data){
service.entry = data;
})
.error(function(data, status){
alert('error!');
});
}
return service;
});
This sort of worked but when I called either function from the controller, the controller continued immediately after the call. It did not wait for the data to actually be returned from the server. This behavior was not apparent when I started writing in Angularjs. So, after spending much time on web searching on various Angularjs subjects, I found the code that I presented in the original post with the forum. I did some modification to the acutal http call. It does work and my controller gets control after the data is actually delivered by the server which is what I need for my app. So the bottom line here is that I need to be able to use the http service to obtain data from the server and be sure that my controller continues after the call only when the data has been actually delivered to the factory. I looked at your code and it is not apparent to me how it only returns when the data is "ready". As I said, I am a beginner with Angularjs so I am probably missing something.
Again, thanks for your help. I hope this explanation is precise enough. If not, I will gladly send more detail.
--
You received this message because you are subscribed to a topic in the Google Groups "AngularJS" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/angular/6IlGxcU8BH8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to angular+u...@googlegroups.com.
To post to this group, send email to ang...@googlegroups.com.
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.