3

$http.get からコントローラーの変数にデータを割り当てようとしています。

 $http.get(URL).success(function (data) {
      $scope.results = data;
      console.log('results in $http.get :'+ $scope.results);
    });

 console.log('results after http.get'+ $scope.results);

get からの最初のコンソール ログ印刷データ。$http.get(url).success の後、$scope.results は未定義として出力されます。

4

2 に答える 2

8

これは$http.getが非同期であるためです。したがって、ajax リクエストが完了するまでコードは保留されず、残りのコードが実行されます。したがってconsole.log、ajax リクエストが完了する前に 2 番目が実行されます。この時点では、 というスコープ変数はありません$scope.results。これは、リクエストが完了した後にのみ定義されます。そのため、 が出力されundefinedます。あなたの最初のものは、ajax が成功して完了しconsole.logた後にのみ印刷されます。$httpこの時点で、バックエンドから来る$scope.resultsように割り当てられています。data

于 2014-12-03T08:51:54.480 に答える
2

$httpasynchronous関数です。すぐに返されますがpromise、実際の結果ではありません。リクエストが完了すると、onsuccessが呼び出されます。

2 番目 (呼び出しの外のもの)は、戻るconsole.log前に実行され$httpます。

于 2014-12-03T08:53:00.083 に答える