1

Hi my code is very simple but i can't get to log the http result to this:

var app = angular.module('app', ['ngRoute']);

app.run(['contacts_helper','$rootScope', function(contacts_helper,$rootScope){
    var x = contacts_helper.getAll();
    console.log(x); // returns undefined 
  }]);

app.service('contacts_helper',['$http','$rootScope', function($http,$rootScope){

  this.getAll = function(){

    $http({
    method:'GET',
    url:'http://localhost/myjson.json',
    params:{id_user:$rootScope.session.id_user}

    }).success(function(response){

     return response;

    }).error(function(err){

     return false;

    });


    }


}]);

it always return undefined in console

So how to achieve this?

itsme
  • 48,972
  • 96
  • 224
  • 345
  • possible duplicate of [How to return the response from an AJAX call?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Ian Mar 14 '14 at 15:31
  • 1
    You need to return the promise from the `$http` call, technically success and error functions haven't run yet by the time `x` gets assigned, thus x is `undefined` – m.e.conroy Mar 14 '14 at 15:33

1 Answers1

4

In your interface - you should make getAll is a promise. You need to use .then to access its content:

contacts_helper.getAll().then(function(response){
  console.log(response); 
}]);

This is possible, by changing getAll to return the http call.

this.getAll = function(){

    return $http({
    method:'GET',
    url:'http://facebook.com',
    params:{id_user:$rootScope.session.id_user}

    }).success(function(response){

     return response;

    }).error(function(err){

     return false;

    });

};

Or even simpler:

this.getAll = function(){

    return $http({
    method:'GET',
    url:'http://facebook.com',
    params:{id_user:$rootScope.session.id_user}

    });

};

Also, you should probably read How do I return the response from an asynchronous call?

Community
  • 1
  • 1
Benjamin Gruenbaum
  • 270,886
  • 87
  • 504
  • 504