2014-10-04 5 views
0

У меня был контроллер и функция getData, как показано. Проблема в том, что $ scope.results вне цикла for не имеет содержимого. Хотя во втором запросе http.get он имеет контент.

appControllers.controller('MyaSellerOrderCtrl', ['$scope', '$rootScope', 'Order', '$http', 
    function($scope, $rootScope, Order, $http) { 
     $scope.results = []; 
     $scope.getData = function() { 
       $http.get('api/orders/business/?user_id=' + $rootScope.user.user_id).success(function(data){ 
        for (var i = 0; i < data.length; i++) { 
         $http.get('api/orders/seller/?business_id=' + data[i].business_id).success(function(data1){ 
          // console.log(data1);   
          $scope.results[i] = data1; 
         }); 
        } 
        console.log($scope.results); 
       }); 
     }; 
     $scope.getData(); 
    }]); 
+0

, что из-за работы АЯКС асинхронно –

+0

Кроме того, вы развернули обещания? И, наконец, $ http действительно должен пойти в отдельный угловой сервис, который будет следовать хорошей практике и облегчит вам некоторые проблемы. – Zlatko

+0

Я новичок в angularjs. Итак, как мне сделать, чтобы сделать эту работу –

ответ

1

Объяснение

// STEP 1: your first request 
$http.get('api/orders/business/?user_id=' + $rootScope.user.user_id).success(function(data){ 
    // STEP 2 : your loop started 
    for (var i = 0; i < data.length; i++) { 
     // STEP 3 : you hit another request. it does not block any operation because it run asynchronously. 
     // it also does not wait for any previous request to be completed. 
     $http.get('api/orders/seller/?business_id=' + data[i].business_id).success(function(data1){ 
      // console.log(data1); 
      $scope.results[i] = data1; 
     }); 
    } 
    // STEP 4: this doesn't wait for STEP 3 to complete because it [STEP 3 ] run asynchronously. 
    // this lin run after for loop complete. 
    console.log($scope.results); // so you get nothing here as STEP 3 is still running 
}); 

Справочник

  1. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests
  2. How to $http Synchronous call with AngularJS
+2

, так как я могу изменить этот код, чтобы получить контент в переменной $ scope ..? –

+0

попробуйте использовать сервис и верните ему обещание. По разрешению обещания введите данные в переменную '$ scope'. – TheVillageIdiot

+0

проверить это http://chariotsolutions.com/blog/post/angularjs-corner-using-promises-q-handle-asynchronous-calls/ –

Смежные вопросы