1

I'm performing a GET - request on my back end to retrieve some JSON - data. I want to store a part of the data in a variable because I want to use it after the request. But everytime, the variable is undefined while I did the same thing in another controller. Can someone tell me what I'm doing wrong?

This is the code:

 var itemNumber;
 $http.get(URLtoServer + 'serialNumber/' + $stateParams.serialNumber + '/?format=json').success(function(dataSerialNumber){
      itemNumber = dataSerialNumber.id;
    }).error(function(){
      //code
    });

    console.log(itemNumber);
    item.number = itemNumber; 

EDIT POST CALL:

var postPromise = $http.post(URLtoServer + 'problem/', item);

  postPromise.success(function (response) {
    angular.extend(item, response);
    showIssueReportedAlert($mdDialog); 

    $http.get('assets/settings/general.json').success(function(data){
      companyURL = data[0].url;

      $timeout(function(){
        //$window.location.href = companyURL;
      }, 3000);
    });         
  });

  postPromise.error(function(){
    showErrorAlert($mdDialog);

    $scope.renderSendbutton = true;
    $scope.showProgressCircular = false;
  });
Jesper
  • 316
  • 1
  • 14

2 Answers2

2

You're doing an async get request, which returns immediately, and then assigning the itemNumber (which is undefined at the moment since the get request hasn't finished) to your item.number.

You need to do the assignment in the callback:

 var itemNumber;
 $http.get(URLtoServer + 'serialNumber/' + $stateParams.serialNumber + '/?format=json').success(function(dataSerialNumber){
      itemNumber = dataSerialNumber.id;

       console.log(itemNumber);
       item.number = itemNumber; 
    }).error(function(){
      //code
    });
Omri Aharon
  • 16,959
  • 5
  • 40
  • 58
2

You can put your POST $http call inside a function and call it in the .success of the GET.

 var itemNumber;
 $http.get(URLtoServer + 'serialNumber/' + $stateParams.serialNumber + '/?format=json').success(function(dataSerialNumber){
      itemNumber = dataSerialNumber.id;

       console.log(itemNumber);
       item.number = itemNumber; 
       doPostCallNow(); //Calling the POST 
    }).error(function(){
      //code
    });

function doPostCallNow(){
    var postPromise = $http.post(URLtoServer + 'problem/', item); 
    //And rest of your code...
}
Zee
  • 8,420
  • 5
  • 36
  • 58