AngularJS:将$ http.get数据分配给变量
问题描述:
我尝试将数据从$ 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打印为未定义之后。
答
这是因为$http.get
是异步的。所以你的代码不会被搁置,直到ajax请求完成,而是会执行其余的代码。所以你的第二个console.log
将在ajax请求完成之前执行。此时没有名为$scope.results
的范围变量,该变量仅在请求完成后定义,这就是为什么它会打印undefined
。你的第一个console.log
只有在$http
ajax成功完成后才会打印,此时你有$scope.results
,它被分配到来自后端的data
。
答
$http
是asynchronous
功能。它立即返回,但它返回promise
不是真正的结果。当请求完成时onsuccess
被调用。
第二个(呼叫之外的)console.log
在$http
之前执行返回。
由于其他答案指出该方法是异步的,所以它立即返回。成功回调在完成并填充变量时被调用,并且如果您已正确设置绑定,则您的UI将更新。它的行为完全如实。 – 2014-12-03 09:03:06
现在我尝试获取像这样的数据: var getSomething = function(){ return $ http({method:“GET”,url:URL})然后(函数(result){ return result.data; }); };并将结果赋值给变量:$ scope.results = getSomething(); – hwg 2014-12-03 09:13:04