2016-04-26 85 views
1
app.controller('tableController', function ($scope, $filter, ngTableParams,$http){ 

    $scope.users = []; 

    $http.get("getjsondata").success(function (response) { 
     $scope.users = response; //ajax request to fetch data into $scope.data 
    }); 

    console.log($scope.users); // I am not getting the updated value as 
           // I need to pass this value in another function 
}); 
+0

首先檢查你正在從JSON你越來越響應和檢查瀏覽器控制檯,如果你得到任何錯誤的任何數據。您還可以調試您的Angular代碼以檢查響應的值是多少 – user3045179

+1

可能的重複[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i -return-the-a-response-from-an-asynchronous-call)由於'response'只在異步請求完成後纔可用,所以不能在'console.log'中出現。 –

回答

1

console.log語句被執行您發出HTTP請求之後。

您需要在您的成功回調中記錄/與它進行交互。

$http.get("getjsondata").success(function (response) { 
    $scope.users = response; 
    console.log($scope.users); 
}); 

此外,儘量不要在您的控制器中使用$scope。請參閱John Papa's style guide for Angular.js

3

成功後的功能模態值調用後回調完成後,如果你想看到你必須調用任何其他功能或通過內部的任何值值回調

$scope.users = []; 
$http.get("getjsondata").success(function (response) { 
    $scope.users = response; 
    console.log($scope.users); 
}); 
1

您的日誌消息寫入成功承諾之外,並且可能正在執行之前您的任務。請嘗試以下操作:

$scope.users = []; 


$http.get("getjsondata").success(function (response) { 
    $scope.users = response; 
    console.log($scope.users); 
}); 

不要忘記承諾是異步的,因此將意味着它們會晚於無論是在執行console.log語句之後到來執行。

1

原因是console.log($scope.users);將在$http.get().success()執行之前調用;

$http.get()返回承諾。

可以調試此類似:

$http.get("getjsondata").success(function (response) { 
    console.log('i am after the promise return') 
    $scope.users = response; //ajax request to fetch data into $scope.data 
}); 
console.log('i get executed first'); 
console.log($scope.users); 
+0

感謝您以簡單的方式理解此問題的方式。現在我明白了首先執行的語句的實際處理過程,以及爲什麼它實際上並沒有打印由於異步調用而產生的值。 – manish