2016-04-26 4 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から任意のデータを取得している場合。角度コードをデバッグして、応答の値が何であるかを確認することもできます – user3045179

+1

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i -return-the-as-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

関連する問題