我有以下代码:
$http({
method: 'GET',
url: 'http://localhost:8080/getStuff'
}).then(function successCallback(response) {
$scope.stuffData= response.data.length;
}, function errorCallback(response) {
});
console.log("amount is:" +$scope.stuffData);
});
在这个例子中,我的日志给出了:
amount is:undefined
其他一些SO问题建议运行$ scope。$适用于使我的范围保持不变。对此我收到以下错误:
angular.js:13920 Error: [$rootScope:inprog] $digest already in progress
坚持我的范围的正确方法是什么? I.E将get请求的值赋给范围变量的正确方法是什么?
答案 0 :(得分:0)
HTTP调用异步。在您的应用检索数据之前,您的console.log
可能被称为。调用console.log
时,尚未定义$scope.stuffData
。
将console.log
移至.then
。
$http({
method: 'GET',
url: 'http://localhost:8080/getStuff'
}).then(function successCallback(response) {
$scope.stuffData = response.data.length;
console.log("amount is:", $scope.stuffData); // <-- It should work
}, function errorCallback(response) {
});
答案 1 :(得分:0)
HTTP请求以异步方式运行。为了处理此概念,您必须使用promises。
Angular使用回调函数来处理异步HTTP调用。
在您的情况下,$scope.stuffData
未定义,因为console.log
在http请求获取.then()
回调函数中的数据之前运行。
如果您已在console.log
函数中添加.then()
,则可以解决此问题。
答案 2 :(得分:0)
在检索数据之前执行console.log()(http调用是异步的),因此该值尚未定义。成功后,请尝试检查函数内部的值:
$http({
method: 'GET',
url: 'http://localhost:8080/getStuff'
}).then(function successCallback(response) {
$scope.stuffData= response.data.length;
console.log("amount is:" +$scope.stuffData);
}, function errorCallback(response) {
console.log("Response error");
});
});
答案 3 :(得分:-1)
try with this one please--
$http({
method: 'GET',
url: 'http://localhost:8080/getStuff'
}).then(function successCallback(response) {
var obj = JSON.parse(response);
$scope.stuffData= obj.data.length;
$scope.$apply();
console.log($scope.stuffData);
}, function errorCallback(response) {
});
});