Javascript 如何使用$http.get每3秒发出一个新请求,并在函数外部获取数据
我想从这个页面获取一些数据。每次刷新页面时,此页面上的数据都会更新。所以我想更新这些值。为了更新这些值,我可以使用$timeout,但是我需要以某种方式在getdata之外获取这些值,因为我希望随后将这些值插入另一个函数以制作图表,否则每次函数更新时,整个图表都会继续呈现。我无法得到这个答案所在函数之外的值,但据我所知,大多数答案都使用函数内部的数据 如何在JavaScript函数之外获取更新的值并将其插入另一个函数?或者也许有另一种更好的方法来解决这个问题 我的代码:Javascript 如何使用$http.get每3秒发出一个新请求,并在函数外部获取数据,javascript,jquery,angularjs,json,Javascript,Jquery,Angularjs,Json,我想从这个页面获取一些数据。每次刷新页面时,此页面上的数据都会更新。所以我想更新这些值。为了更新这些值,我可以使用$timeout,但是我需要以某种方式在getdata之外获取这些值,因为我希望随后将这些值插入另一个函数以制作图表,否则每次函数更新时,整个图表都会继续呈现。我无法得到这个答案所在函数之外的值,但据我所知,大多数答案都使用函数内部的数据 如何在JavaScript函数之外获取更新的值并将其插入另一个函数?或者也许有另一种更好的方法来解决这个问题 我的代码: function
function getData(){
var data;
$http.get(path).then(function(response){
data = response.data
console.log(response.data) //works fine
})
return data
}
console.log(data)//returns undefined
现在如果我想用$timeout更新函数
我需要这样做
$timeout(getData, 3000)
现在,我如何获得这些更新的值
编辑:
返回14我不知道那是什么,但肯定不是正确的数据
在AngularJS中,
有一个名为$timeout的服务,它可以在一个循环中实现您想要的功能。
请在此处查看全部官方文档:您好,
在AngularJS中,
有一个名为$timeout的服务,它可以在一个循环中实现您想要的功能。
请在此处查看完整的官方文档:您只需每隔一段时间运行代码:
setInterval( function(){
$http.get(path).then(function(response){
console.log(response.data);
// Update your page here
});
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds
您只需要在一段时间间隔内运行代码:
setInterval( function(){
$http.get(path).then(function(response){
console.log(response.data);
// Update your page here
});
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds
使用$q的angular,需要注入$q作为依赖项
function getData(){
var deffered = $q.defer();
var data;
$http.get(path).then(function(response){
data = response.data
$q.resolve(data);
})
return deffered.promise;
}
var getDataCall = getData();
getDataCall.then(function(data){
console.log(data);
})
如果要重复此调用,请使用,$interval(fn,delay,[count],[invokeApply],[Pass])代码>
见医生
试着重复这个,(我没有试过)
使用$q的angular,需要注入$q作为依赖项
function getData(){
var deffered = $q.defer();
var data;
$http.get(path).then(function(response){
data = response.data
$q.resolve(data);
})
return deffered.promise;
}
var getDataCall = getData();
getDataCall.then(function(data){
console.log(data);
})
如果要重复此调用,请使用,$interval(fn,delay,[count],[invokeApply],[Pass])代码>
见医生
试着重复这个,(我没有试过)
您希望使用Angular的$interval
模块来执行此操作
实际上,您有一个名为getData
的函数,它使用$http
模块。然后,在该承诺的解决方案中,使用新数据设置$scope.chartData
然后在某个时间间隔调用该函数:
setInterval( function(){
$http.get(path).then(function(response){
console.log(response.data);
// Update your page here
});
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds
如果您在控制器中执行此操作,则不需要$q
,但您可能应该将其从控制器中取出并放入服务中,然后使用$q
模块
使用完整的Angular应用程序作为与您提供的端点一起工作的解决方案
更新:如果您想从控制器外部的外部函数调用它,您可以创建一个使用$q
的工厂并将其注入控制器。相同的示例,但有一个工厂:
您还将注意到示例中工厂/服务的$scope.getBytesWrite
方法。为了获取部分数据,您需要执行一个函数,仅尝试访问图表数据的属性不会更新单个值。请参阅。要使用Angular的$interval
模块执行此操作,请参阅
实际上,您有一个名为getData
的函数,它使用$http
模块。然后,在该承诺的解决方案中,使用新数据设置$scope.chartData
然后在某个时间间隔调用该函数:
setInterval( function(){
$http.get(path).then(function(response){
console.log(response.data);
// Update your page here
});
}, 3000 );
$interval($scope.getData, 3000); // every 3 seconds
如果您在控制器中执行此操作,则不需要$q
,但您可能应该将其从控制器中取出并放入服务中,然后使用$q
模块
使用完整的Angular应用程序作为与您提供的端点一起工作的解决方案
更新:如果您想从控制器外部的外部函数调用它,您可以创建一个使用$q
的工厂并将其注入控制器。相同的示例,但有一个工厂:
您还将注意到示例中工厂/服务的$scope.getBytesWrite
方法。为了获取部分数据,您需要执行一个函数,仅尝试访问图表数据的属性不会更新单个值。请参阅。使用$interval
服务和$http
服务
$http
服务返回一个承诺,您可以使用该承诺进行链接。使用$interval
服务重复创建一个新承诺,并从该承诺中链接,将更新的数据放入范围
回报这一承诺,并从中获得链条
angular.module("myApp").controller("myVm",
function($scope,$http,$interval) {
var count = 0;
function getHttpPromise(url) {
var promise = $http.post(url);
//return for chaining
return promise;
};
function updateScope(promise) {
//chain from promise
promise.then (function (response) {
count++;
$scope.currentCount = "Current response "+count;
});
};
updateScope(getHttpPromise("/echo/json"));
var intervalPromise = $interval( function(){
updateScope(getHttpPromise("/echo/json"));
}, 1000 );
$scope.onStopUpdate = function () {
$interval.cancel(intervalPromise);
});
});
上面的示例有一个函数getHttpPromise
,该函数返回链接的承诺。updateScope
函数从Http链接,承诺更新作用域。然后,该示例使用$interval
服务每1000毫秒更新一次作用域
$interval
服务还返回可用于链接和取消的承诺
.将$interval
服务与$http
服务一起使用
$http
服务返回一个承诺,您可以使用该承诺进行链接。使用$interval
服务重复创建一个新承诺,并从该承诺中链接,将更新的数据放入范围
回报这一承诺,并从中获得链条
angular.module("myApp").controller("myVm",
function($scope,$http,$interval) {
var count = 0;
function getHttpPromise(url) {
var promise = $http.post(url);
//return for chaining
return promise;
};
function updateScope(promise) {
//chain from promise
promise.then (function (response) {
count++;
$scope.currentCount = "Current response "+count;
});
};
updateScope(getHttpPromise("/echo/json"));
var intervalPromise = $interval( function(){
updateScope(getHttpPromise("/echo/json"));
}, 1000 );
$scope.onStopUpdate = function () {
$interval.cancel(intervalPromise);
});
});
上面的示例有一个函数getHttpPromise
,该函数返回链接的承诺。updateScope
函数从