2014-10-04 67 views
0

我有控制器和函數getData,如圖所示。問題是for循環之外的$ scope.results沒有內容。在第二個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

,由於AJAX工作異步 – 2014-10-04 08:44:50

+0

另外,你是否打開承諾?最後,$ http應該真正進入一個單獨的角度服務,這將遵循良好的習慣,並減輕你的一些麻煩。 – Zlatko 2014-10-04 23:29:04

+0

我是newje to angularjs。那麼我將如何做到這一點 – 2014-10-06 05:25:29

回答

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變量中的內容..? – 2014-10-06 05:24:27

+0

嘗試使用服務並從中返回承諾。在解析promise時,將數據填充到'$ scope'變量中。 – TheVillageIdiot 2014-10-06 12:38:20

+0

看看這個http://chariotsolutions.com/blog/post/angularjs-corner-using-promises-q-handle-asynchronous-calls/ – 2014-10-07 08:59:33